如何從包含 nD 點坐標的串列中盡可能高效地獲取 ndarray 的值。
這是 3D 的實作:
1 arr = np.array([[[0, 1]]])
2 points = [[0, 0, 1], [0, 0, 0]]
3 values = []
4 for point in points:
5 x, y, z = point
6 value.append(arr[x, y, z])
7 # values -> [1, 0]
如果這是不可能的,有沒有辦法將第 5-6 行概括為 nD?
uj5u.com熱心網友回復:
我確信有辦法使用花哨的索引來實作這一點。這是一種不用for回圈的方法:
arr = np.array([[[0, 1]]])
points = np.array([[0, 0, 1], [0, 0, 0]])
x,y,z = np.split(points, 3, axis=1)
arr[x,y,z]
輸出(值):
array([[1],
[0]])
或者,您可以按照評論的建議使用元組解包:
arr[(*points.T,)]
輸出:
array([1, 0])
uj5u.com熱心網友回復:
根據索引的 Numpy 檔案,您可以輕松地做到這一點,只要您使用元組而不是串列:
arr = np.array([[[0, 1]]])
points = [(0, 0, 1), (0, 0, 0)]
values = []
for point in points:
value.append(arr[point])
# values -> [1, 0]
這與所涉及的 Numpy 陣列的維度無關。
獎勵:除了附加到串列之外,您還可以使用 Pythonslice函式直接提取范圍:
arr = np.array([[[0, 1]]])
points = (0, 0, slice(2) )
vals = arr[points]
# --> [0 1] (a Numpy array!)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/439823.html
