這個問題在這里已經有了答案: 在回圈中堆疊 numpy 陣列的最快方法是什么? (3 個回答) 8 小時前關閉。
我必須使用 Python 對資料執行一些操作;下面是一個需要太多時間(大約 21 分鐘)的操作,我必須在不同的資料集上執行許多這樣的操作。這是正常的,還是可以更快?
flag = np.array([], dtype=np.bool_)
for i in range(len(dset1)):
flag = np.append(flag, np.any(abs(dset1[i, 0] - dset2[:, 0]) / 1000 <= 500))
長度dset1為 72805,長度dset2為 1455873。
uj5u.com熱心網友回復:
千萬不要np.append這樣使用!在這種情況下,它分配了 72805 次不同的陣列。
相反,至少要這樣做:
flag = np.array([
np.any(abs(dset1[i,0]-dset2[:,0])/1000 <= 500) for i in range(len(dset1))
])
首先迭代地構建一個串列,然后一次性將其轉換為一個陣列。
如果dset1并且dset2只是陣列,這里還有另一個優化可以通過聰明的廣播來完成——但這應該會減少你的大部分運行時間。
另一個優化的解決方案是跳過 for 回圈并對其進行矢量化:
dset1row = dset1[:, 0]
dset2row = dset2[:, 0]
flag2 = np.any((abs(dset1row[:, np.newaxis] - dset2row[np.newaxis, :]) < (500 * 1000)), axis=1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/488445.html
