[英]How to map corresponding values of a 2D NumPy array into an 1D array
[英]How to map a 2D numpy array onto a 1D array with another 2D array as a map?
所以,我有兩個2D numpy的陣列, data
包含實際樣本數據:
[[12 15 5 0]
[ 3 11 3 7]
[ 9 3 5 2]
[ 4 7 6 8]]
另一個location
,包含一個地圖,另一個唯一的,非重疊的int值的二維數組,對應於與這兩個相同大小的新1D數組中的空格:
[[ 5 6 9 10]
[ 4 7 8 11]
[ 3 2 13 12]
[ 0 1 14 15]]
到目前為止,我能夠運行傳輸的唯一方法是使用簡單的for循環:
arr = np.zeros(4*4, dtype = int)
for i in range(4):
for j in range(4):
mapval = location[i, j]
arr[mapval] = data[i, j]
哪個輸出正確[ 4 7 3 9 3 12 15 11 3 5 0 7 2 5 6 8]
這對於簡單的4 * 4陣列來說很好,但實際的數據集時鍾為512 * 512,這種方法需要相當長的時間才能完成。 所以我的問題是,是否有任何函數或方法利用ufuncs / numpy的快速處理功能來更有效地完成這項工作?
您需要對location數組進行排序以對數據數組進行重新排序的索引,可以使用argsort
進行計算:
data.ravel()[location.ravel().argsort()]
# array([ 4, 7, 3, 9, 3, 12, 15, 11, 3, 5, 0, 7, 2, 5, 6, 8])
import numpy as np
data = np.array([[12, 15, 5, 0],
[ 3, 11, 3, 7],
[ 9, 3, 5, 2],
[ 4, 7, 6, 8]])
location = np.array([[ 5, 6, 9, 10],
[ 4, 7, 8, 11],
[ 3, 2, 13, 12],
[ 0, 1, 14, 15]])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.