簡體   English   中英

如何將2D numpy數組映射到具有另一個2D數組作為映射的一維數組?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM