簡體   English   中英

3D矩陣的numpy索引操作

[英]numpy indexing operations for 3D matrix

有沒有一種優雅/快速的方法來重現此現象而無需for循環? 我正在尋找一個3D值矩陣,以及一個2D矩陣,該矩陣為創建相同形狀的新3D矩陣提供復制第三維尺寸值的索引。 這是一個有很多循環的實現。

np.random.seed(0)

x = np.random.randint(5, size=(2, 3, 4))
y = np.random.randint(x.shape[1], size=(3, 4))

z = np.zeros((2, 3, 4))

for i in range(x.shape[0]):
    for j in range(x.shape[1]):
        z[i, j, :] = x[i, y[i, j], :]

這讓我有些困惑,直到我意識到您並沒有使用所有y y是(3,4),但是您正在索引(2,3):

In [28]: x[np.arange(2)[:,None], y[:2,:3],:]
Out[28]: 
array([[[4, 0, 0, 4],
        [4, 0, 3, 3],
        [3, 1, 3, 2]],

       [[3, 0, 3, 0],
        [2, 1, 0, 1],
        [1, 0, 1, 4]]])

我們可以將所有y與:

In [32]: x[np.arange(2)[:,None,None],y,np.arange(4)]
Out[32]: 
array([[[4, 0, 3, 2],
        [4, 0, 3, 2],
        [3, 0, 0, 3]],

       [[3, 1, 1, 4],
        [3, 1, 1, 4],
        [1, 1, 3, 1]]])

3個索引廣播到(2,3,4)。 但是選擇與z不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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