我對編程/Python/NumPy 比較陌生,所以如果我的無知表現出來,我深表歉意......
假設我有兩個 2d NumPy 陣列:
import numpy as np
a = np.array([[1, 5, 20],
[2, 15, float("NaN")],
[4, float("NaN"), float("NaN")]])
b = np.array([[4, float("NaN")],
[1, 13],
[5, float("NaN")]])
我想找出每個矩陣第一行所有元素之間的差異,每個矩陣第二行所有元素之間的差異,等等。給定上述矩陣的所需結果的示例是
[[ 3. nan -1. nan -16. nan] # <-- differences between all elements b[0] and a[0]
[ -1. 11. -14. -2. nan nan] # <-- differences between all elements b[1] and a[1]
[ 1. nan nan nan nan nan]] # <-- differences between all elements b[2] and a[2]
在使用回圈時獲得上述結果的一種方法是
outcome = []
for a_row, b_row in zip(a, b):
outcome.append((b_row - a_row[:,None]).flatten())
outcome = np.array(outcome)
但是,有沒有一種方法可以在不回圈更快的行的情況下解決這個問題?
uj5u.com熱心網友回復:
您可以轉置陣列以避免子結構時的形狀差異,然后ravel和reshape結果
arr = b.T[:, None] - a.T
np.ravel([arr[0], arr[1]], 'F').reshape((a.shape[0], a.shape[1] * b.shape[1]))
輸出
[[ 3. nan -1. nan -16. nan]
[ -1. 11. -14. -2. nan nan]
[ 1. nan nan nan nan nan]]
uj5u.com熱心網友回復:
它仍在使用回圈,但以串列理解方式:
np.array([(b_row - a_row[:,None]).flatten() for a_row, b_row in zip(a, b)])
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/518292.html
