首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从nd点列表中获取Numpy ndarray值

从nd点列表中获取Numpy ndarray值
EN

Stack Overflow用户
提问于 2022-03-06 23:57:50
回答 2查看 96关注 0票数 2

如何从包含n-D点坐标的列表中尽可能有效地获得ndarray的值。

这里是3D的实现:

代码语言:javascript
复制
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的方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-07 09:02:23

基于用于索引的Numpy文档,您可以很容易地做到这一点,只要使用元组而不是列表:

代码语言:javascript
复制
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函数直接提取范围:

代码语言:javascript
复制
arr = np.array([[[0, 1]]])
points = (0, 0, slice(2) )

vals = arr[points]
# --> [0 1] (a Numpy array!)
票数 1
EN

Stack Overflow用户

发布于 2022-03-07 08:58:02

我相信有办法来实现这一点使用花哨的索引。下面是一种不使用for-循环的方法:

代码语言:javascript
复制
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]

产出(值):

代码语言:javascript
复制
array([[1],
       [0]])

或者,您可以按照注释中的建议使用元组解压:

代码语言:javascript
复制
arr[(*points.T,)]

产出:

代码语言:javascript
复制
array([1, 0])
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71375171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档