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