python - 如何通过点坐标列表访问数组
问题描述
我有一个数组A = np.ones((4,4,4))
和另一个数组,它们表示数组A中称为B的点的坐标,让我们假设B = [[2,2,2], [3,2,1]]
。
我试图通过像 A[B] 这样的数组索引来访问 A,但它不起作用。
我怎样才能以优雅的方式做到这一点,这也适用于 B ,它具有更高的尺寸,如 B 的形状 (10, 20, 3) ?
解决方案
您可以传递坐标列表,但您应该转置该列表。这样第i个维度的项目作为索引中的第i个元素传递,例如:
A[tuple(np.transpose(B))]
对于 4×4×4 矩阵:
>>> A = np.arange(64).reshape(4,4,4)
>>> A
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]],
[[16, 17, 18, 19],
[20, 21, 22, 23],
[24, 25, 26, 27],
[28, 29, 30, 31]],
[[32, 33, 34, 35],
[36, 37, 38, 39],
[40, 41, 42, 43],
[44, 45, 46, 47]],
[[48, 49, 50, 51],
[52, 53, 54, 55],
[56, 57, 58, 59],
[60, 61, 62, 63]]])
我们得到给定的坐标:
>>> A[tuple(np.transpose(B))]
array([42, 57])
如果我们手动计算这些,我们会得到:
>>> A[2,2,2]
42
>>> A[3,2,1]
57
背景:
A[1,2,3]
是A[(1,2,3)]
(所以在一个元组中)的缩写。您可以获取多个项目,A[([2,3], [2,2], [2,1])]
但您首先需要转置数据。
由于数据表示为[[2,2,2], [3,2,1]]
,因此我们首先需要将其转置为[[2,3], [2,2], [2,1]]
。接下来我们将它包装在一个元组中,并可以使用它来下标A
。
推荐阅读
- javascript - 如何定位文件 discord.js v12?
- c# - 如何在 C# 的 Xpath 中使用转义字符,使用其中包含单引号和双引号的文本来查找元素?
- javascript - 即使请求成功,为什么我的 no-cors fetch() 也不行?
- c++ - 创建日历,输出格式问题
- azerothcore - 如何使 fork master 分支与 azerothcore master 分支保持同步
- google-play - 某些用户可能不会在 Play 商店中显示评论的原因
- python - 为什么字符串列表上的字符串连接函数似乎排除了列表中的最后一项?
- list - Flutter list of Text:如何修复所有列表项的样式
- python - 如何使用训练有素的 keras 模型预测数据
- python - 如何将排行榜创建为数据库