![](/img/trans.png)
[英]Is there a way how i can find the index of an multidimensional numpy array by matching it to another numpy array?
[英]How can I update a numpy array with index in another numpy array
我有
我想做的就像下面的代碼
for i in range(n1):
for j in range(n2):
for k in range(i1):
b[i, j, k, :] = a[i, j, idx[i, j, k], :]
如果有一個 numpy function 來實現這個不用for循環?
使用作為起點:
import numpy as np
n1, n2, n3, n4, i1 = range(2, 7)
a = np.random.randint(10, size=(n1, n2, n3, n4))
idx = np.random.randint(n3, size=(n1, n2, i1))
b = np.zeros_like(a, shape=(n1, n2, i1, n4))
一般來說,您可以執行以下操作:
I, J, K = np.ogrid[:n1, :n2, :i1]
b[I, J, K] = a[I, J, idx]
這里的I
J
和K
arrays 相當於循環變量i
j
和k
。 它們的形狀必須與idx
的形狀一致。
如果b
的形狀為 (n1, n2, i1, n4) 那么你不妨這樣做:
I, J, _ = np.ogrid[:n1, :n2, :1]
b = a[I, J, idx]
或者沒有ogrid
:
b = np.take_along_axis(a, idx[...,np.newaxis], axis=2)
這里newaxis
用於插入一個長度為 1 的軸以允許廣播。 查看numpy 索引文檔以獲取更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.