我有一個 3d(3, 2, 3)
陣列,第一維(3)是靈活的,它可以是任何大小。
arr = np.array(
[[[56, 24, 32],
[56, 24, 32]],
[[51, 27, 72],
[51, 27, 72]],
[[36, 14, 49],
[36, 14, 49]]])
索引陣列是(2,3)
:
idxs = np.array(
[[1, 0, 2],
[2, 1, 0]])
我想通過idxs索引arr。預期結果是:
[[[24 56 32]
[32 24 56]]
[[27 51 72]
[72 27 51]]
[[14 36 49]
[49 14 36]]])
如果我使用下面的 for 回圈,則需要很多時間:
for i, arr2d in enumerate(arr):
for j, (arr1d, idx) in enumerate(zip(arr2d, idxs)):
arr[i, j] = arr1d[idx]
所以我的問題是:我怎樣才能加快這個程序?
uj5u.com熱心網友回復:
采用np.take_along_axis
np.take_along_axis(arr, idxs[None, ...], 2)
Out[]:
array([[[24, 56, 32],
[32, 24, 56]],
[[27, 51, 72],
[72, 27, 51]],
[[14, 36, 49],
[49, 14, 36]]])
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/462201.html
標籤:麻木的 矢量化 numpy-ndarray 阵列广播 numpy索引
上一篇:Python逐元素乘法
下一篇:未知數量行的內部連接