我有一個 4D 目標 NumPy 陣列,我想用來自 2D 源陣列的值填充它,使用兩個額外的 2D 陣列指定目標陣列的第二和第三軸中的位置,源陣列中的值應放置在該位置。下面帶有一些示例值的代碼可以使用 for 回圈方法執行此操作:
import numpy as np
T, M, N, D = 5, 4, 3, 2 # Example dimensions
target = np.zeros((T, M, N, D)) # Target array
source = np.arange(T*D).reshape(T, D) # Example source array with arbitrary numbers
index_dim_1 = np.array([ # Array of shape T, D with values between 0 and M-1
[0, 3],
[1, 2],
[2, 1],
[3, 0],
[0, 3]
])
index_dim_2 = np.array([ # Array of shape T, D with values between 0 and N-1
[0, 2],
[1, 1],
[2, 0],
[0, 2],
[1, 1]
])
for t in range(T):
for d in range(D):
m = index_dim_1[t, d]
n = index_dim_2[t, d]
target[t, m, n, d] = source[t, d]
我如何矢量化這種方法?我知道如果目標陣列是 2D,而源陣列和索引陣列都是 1D,我可以使用這種方法,但我不確定如何將它推廣到我的情況。
uj5u.com熱心網友回復:
for t in range(T):
for d in range(D):
n = index_dim_1[t, d]
m = index_dim_2[t, d]
target[t, n, m, d] = source[t, d]
由于您提供了代碼,但沒有提供示例,因此我將自己跳過這一步,然后“眼球”給出答案 - 無需測驗。
target[np.arange(T)[:,None], index_dim_1, index_dim_2, np.arange(D)] = source
這個想法是為(T,D)形狀的陣列創建t和d廣播的索引陣列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/372114.html
