亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用零填充不均勻分布點列表的缺失值

用零填充不均勻分布點列表的缺失值

PHP
慕標5832272 2023-11-09 14:42:06
我將一組點保存為數據幀 dp:xlist   ylist0   0.017108    0.9024941   0.019659    0.7419812   0.030310    0.9208843   0.032064    0.2558264   0.046168    0.5627615   0.060758    0.5830446   0.118274    1.0000007   0.125385    1.0000008   0.140418    1.0000009   0.153699    1.00000010  0.186998    0.29374311  0.215375    0.11228812  0.217875    0.26088313  0.250591    0.32595314  0.262788    0.08491615  0.287382    0.10491016  0.325902    0.08841817  0.377885    0.31202518  0.473086    0.06863219  0.485449    0.05962420  0.557334    0.73437621  0.572133    0.70939222  0.610553    0.84068723  0.626902    0.73793024  0.630276    0.08478725  0.637779    0.09153526  0.717553    0.07441127  0.742187    0.09277028  0.757873    0.53288129  0.780933    0.52820230  0.836708    0.42261531  0.920814    0.35989632  0.938639    0.35524133  0.954564    0.28098934  0.978567    0.64974935  0.995067    0.769272使用 pyplot.vlines 時,它們如下所示:[plt.vlines(x,0,y) for x,y in zip(dp.xlist, dp.ylist)]plt.show()我想用以下代碼替換 xlist:x = linspace(0,1,num=100) ###(or num=200... not important)并使用 ylist 中的值創建一個新的 y,其中 x 接近 xlist,并在其他位置為零。到目前為止,我嘗試的是對于每對 xlist、ylist 值,我檢查我的線性空間中是否有一個點足夠接近 xlist 中的點,然后為其分配相應的 ylist 值,否則,我放一個零。for i in dp.index:    fill = []     for xa in x:        if abs(dp.xlist[i]-xa)<0.001:            tmp = dp.ylist[i]        else:            tmp = 0        fill.append(tmp)但我想我正在覆蓋列表“填充”,這就是為什么它不起作用,但我不知道如何解決這個問題。有沒有一種快速簡單的方法可以實現這一目標?
查看完整描述

2 回答

?
拉風的咖菲貓

TA貢獻1995條經驗 獲得超2個贊

無需循環。您可以使用 pandas 方法:


dp['x_lin'] = x[np.abs(np.subtract.outer(x,dp.xlist.values)).argmin(0)]

dp['y_lin'] = 0

dp.y_lin[np.abs(dp.x_lin-dp.xlist)<0.001] = dp.ylist

您也可以將第一行替換為等效行:


dp['x_lin'] = x[np.abs(x[None,:]-dp.xlist[:,None]).argmin(1)]

輸出:


       xlist     ylist     x_lin     y_lin

0   0.017108  0.902494  0.020202  0.000000

1   0.019659  0.741981  0.020202  0.741981

2   0.030310  0.920884  0.030303  0.920884

3   0.032064  0.255826  0.030303  0.000000

4   0.046168  0.562761  0.050505  0.000000

5   0.060758  0.583044  0.060606  0.583044

6   0.118274  1.000000  0.121212  0.000000

7   0.125385  1.000000  0.121212  0.000000

8   0.140418  1.000000  0.141414  1.000000

9   0.153699  1.000000  0.151515  0.000000

10  0.186998  0.293743  0.191919  0.000000

11  0.215375  0.112288  0.212121  0.000000

12  0.217875  0.260883  0.222222  0.000000

13  0.250591  0.325953  0.252525  0.000000

14  0.262788  0.084916  0.262626  0.084916

15  0.287382  0.104910  0.282828  0.000000

16  0.325902  0.088418  0.323232  0.000000

17  0.377885  0.312025  0.373737  0.000000

18  0.473086  0.068632  0.474747  0.000000

19  0.485449  0.059624  0.484848  0.059624

20  0.557334  0.734376  0.555556  0.000000

21  0.572133  0.709392  0.575758  0.000000

22  0.610553  0.840687  0.606061  0.000000

23  0.626902  0.737930  0.626263  0.737930

24  0.630276  0.084787  0.626263  0.000000

25  0.637779  0.091535  0.636364  0.000000

26  0.717553  0.074411  0.717172  0.074411

27  0.742187  0.092770  0.737374  0.000000

28  0.757873  0.532881  0.757576  0.532881

29  0.780933  0.528202  0.777778  0.000000

30  0.836708  0.422615  0.838384  0.000000

31  0.920814  0.359896  0.919192  0.000000

32  0.938639  0.355241  0.939394  0.355241

33  0.954564  0.280989  0.959596  0.000000

34  0.978567  0.649749  0.979798  0.000000

35  0.995067  0.769272  1.000000  0.000000

輸出圖:

https://img1.sycdn.imooc.com/654c822a0001dc2a03160236.jpg

查看完整回答
反對 回復 2023-11-09
?
蝴蝶不菲

TA貢獻1810條經驗 獲得超4個贊

這看起來不錯。


是的,您正在覆蓋每個 .但是您還為每個 xa 添加了 tmp。我不太清楚你的x是什么。但是嘗試:i


fill = [] 

for i in dp.index:

    tmp = 0

    for xa in x:

        if abs(dp.xlist[i]-xa)<0.001:

            tmp = dp.ylist[i]

    fill.append(tmp)


查看完整回答
反對 回復 2023-11-09
  • 2 回答
  • 0 關注
  • 165 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號