我有一個像這樣的串列或 numpy 陣列:
[[3, 2, 1, 2, 3, 3 ],
[3.1, 2.2, 1.1, 2.1, 3.3, 3.2]]
基于相同的第一行值,它們應分組為以下串列:
[1.1], [2.1,2.2], [3.1,3.2,3.3]
對于上面的每個串列,我想:
sum(abs(list - avg_list))
除了一一找到所有具有相同第一行值的第二行值然后處理它們之外,是否有并行處理的解決方案?
我試過的內容如下:
a = np.sort(a)
a_0 = np.unique(a[0,:])
result = []
for b in a_0:
a_1 = np.extract(a[0,:]==b,a[1,:])
result.append(np.sum(np.abs(a_1-np.mean(a_1))))
uj5u.com熱心網友回復:
這是一種無回圈方法。我使用 將 映射data到nan填充陣列idx。然后使用一些np.nan...函式以排除nan.
In [102]: idx=np.array([3, 2, 1, 2, 3, 3 ])
In [103]: data=np.array([3.1, 2.2, 1.1, 2.1, 3.3, 3.2])
In [104]: res[np.arange(6),idx-1]=data
In [105]: res
Out[105]:
array([[nan, nan, 3.1],
[nan, 2.2, nan],
[1.1, nan, nan],
[nan, 2.1, nan],
[nan, nan, 3.3],
[nan, nan, 3.2]])
In [106]: np.nanmean(res, axis=0)
Out[106]: array([1.1 , 2.15, 3.2 ])
In [107]: res-np.nanmean(res, axis=0)
Out[107]:
array([[ nan, nan, -1.0000000e-01],
[ nan, 5.0000000e-02, nan],
[ 0.0000000e 00, nan, nan],
[ nan, -5.0000000e-02, nan],
[ nan, nan, 1.0000000e-01],
[ nan, nan, -4.4408921e-16]])
In [108]: np.abs(res-np.nanmean(res, axis=0))
Out[108]:
array([[ nan, nan, 1.0000000e-01],
[ nan, 5.0000000e-02, nan],
[0.0000000e 00, nan, nan],
[ nan, 5.0000000e-02, nan],
[ nan, nan, 1.0000000e-01],
[ nan, nan, 4.4408921e-16]])
In [109]: np.nansum(np.abs(res-np.nanmean(res, axis=0)), axis=0)
Out[109]: array([0. , 0.1, 0.2])
映射到 0 填充陣列也可能有效,因為sumetc 不會被多余的 0 所困擾。
我不能保證速度。
您的代碼缺少結果!
In [110]: a = np.sort(np.array((idx,data)))
...: a_0 = np.unique(a[0,:])
...:
...: result = []
...: for b in a_0:
...: a_1 = np.extract(a[0,:]==b,a[1,:])
...: result.append(np.sum(np.abs(a_1-np.mean(a_1))))
In [111]: result
Out[111]: [0.0, 0.10000000000000009, 0.20000000000000018]
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/311493.html
上一篇:將字典值與串列進行比較并回傳鍵
下一篇:如何將物件轉換為集合?
