Python 在多维数组中建立索引

Python indexing in multidimentional array

我有一个 4D numpy 数组 letterOrder(形状为 2 x 3 x 5 x 4),我想使用每个单元格作为坐标来查找矩阵 ov 中的值。

letterOrder = np.array(
    [[[[4, -1, -1, 2],
     [-1, -1, -1, -1],
     [-1, -1, -1, -1],
     [-1, -1, -1, -1],
     [3, -1, -1, -1]],

    [[4, -1, -1, -1],
     [-1, -1, -1, -1],
     [-1, -1, -1, -1],
     [4, -1, -1, -1],
     [-1, -1, -1, -1]],

    [[-1, -1, -1, -1],
     [-1, -1, -1, -1],
     [-1, -1, -1, -1],
     [-1, -1, -1, -1],
     [-1, -1, -1, -1]]],
    
   [[[-1, -1, -1, -1],
     [-1, -1, -1, -1],
     [3, -1, -1, -1],
     [2, -1, -1, -1],
     [-1, -1, -1, -1]],

    [[4, -1, -1, -1],
     [4, -1, -1, -1],
     [-1, -1, -1, -1],
     [-1, -1, -1, -1],
     [-1, -1, -1, -1]],


    [[0, -1, -1, -1],
     [4, -1, -1, -1],
     [-1, -1, -1, -1],
     [-1, -1, -1, -1],
     [-1, -1, -1, -1]]]], dtype = int)

nData = letterOrder.shape[0]
LL = letterOrder.shape[1]
maxLength = letterOrder.shape[2]
maxCount = letterOrder.shape[3]

ov = np.array(
    [[0.603, 0.235, 0.104, 0.034, 0.008],
     [0.193, 0.334, 0.22 , 0.108, 0.037],
     [0.005, 0.235, 0.283, 0.215, 0.11 ],
     [0.   , 0.082, 0.22 , 0.27 , 0.212],
     [0.   , 0.014, 0.104, 0.215, 0.265],
     [0.   , 0.   , 0.   , 0.   , 0.   ]])  # shaped as (maxLength + 1, maxLength)

sims = np.zeros((nData, LL, maxLength))

for i in np.arange(maxCount):
    sims += ov[letterOrder[:,:,np.arange(maxLength),i], np.arange(maxLength)]

我试图计算“sims”而不必遍历每个维度,并设法将它们减少到单个 for 循环。 我想知道是否有一种方法可以让我在没有任何 for 循环的情况下一次计算所有“模拟人生”?

你可以试试这个:

sims = ov[letterOrder, np.arange(maxLength).reshape(-1, 1)].sum(-1)