如何从包含n-D点坐标的列表中尽可能有效地获得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的方法?
发布于 2022-03-07 09:02:23
基于用于索引的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阵列的维数无关。
奖励:除了附加到列表之外,还可以使用Python函数直接提取范围:
arr = np.array([[[0, 1]]])
points = (0, 0, slice(2) )
vals = arr[points]
# --> [0 1] (a Numpy array!)发布于 2022-03-07 08:58:02
我相信有办法来实现这一点使用花哨的索引。下面是一种不使用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])https://stackoverflow.com/questions/71375171
复制相似问题