我有一個形狀(n, 2, 3)為的陣列:
array = np.array([[[-0.903, -3.47, -0.946], [-0.883, -3.48, -0.947]],
[[-1.02, -3.45, -0.992], [-1.01, -3.46, -1]],
[[-1.02, -3.45, -0.992], [-0.998, -3.45, -1]],
[[-0.638, -3.5, -0.897], [-0.604, -3.51, -0.896]],
[[-0.596, -3.52, -0.896], [-0.604, -3.51, -0.896]]])
以及第二個軸的索引陣列,其中每個值參考兩個組合中的每一個,例如,[-0.903, -3.47, -0.946], [-0.883, -3.48, -0.947]如果索引陣列中的對應值 be 1,[-0.883, -3.48, -0.947]則必須采用:
indices = np.array([0, 1, 0, 0, 1], dtype=np.int64)
結果陣列必須如下所示,形狀為 (n, 3):
[-0.903, -3.47, -0.946] [-1.01, -3.46, -1] [-1.02, -3.45, -0.992] [-0.638, -3.5, -0.897] [-0.604, -3.51, -0.896]
我怎么能僅通過 NumPy在指定的維度上這樣做。
uj5u.com熱心網友回復:
在 numpy 中,您可以沿二維組合切片。如果你在arr[idx_x, idx_y]whereidx_x并且idx_y是相同長度的一維陣列,你將得到元素陣列:[arr[idx_x[0], idx_y[0]], arr[idx_x[1], idx_y[1]], arr[idx_x[2], idx_y[2]], ...]
在您的示例中,如果您這樣做:
indices = np.array([0, 1, 0, 0, 1], dtype=np.int64)
x_idxs = np.arange(len(indices), dtype=int)
print(array[x_idxs, indices])
這將回傳您想要的結果。
uj5u.com熱心網友回復:
嘗試使用 for 回圈:
out = []
for i in range(len(indices)):
out.append(list(arr[i,indices[i]]))
print(out)
Output:
[[-0.903, -3.47, -0.946],
[-1.01, -3.46, -1.0],
[-1.02, -3.45, -0.992],
[-0.638, -3.5, -0.897],
[-0.604, -3.51, -0.896]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/449868.html
上一篇:拆分資料框中的單行以相乘
