我正在尝试理解使用坐标列表(不使用循环)从2d NumPy数组中拉取值的最佳方法。
例如:
import numpy as np
arr = np.array([
['AA','AB','AC'],
['BA','BB','BC'],
['CA','CB','CC']
])
coordinates = [(0,0), (1,1)]在进行了一些实验之后:
# This works but does not return what I expected
# I expected ['AA','BB'], but returned ['AB,'AB']
arr[(0,0), (1,1)]
# This does not work
arr[*coordinates]有什么想法?
发布于 2020-09-03 07:52:42
我的意思是你总能做到
[arr[coordinates[0]],arr[coordinates[1]]]得到你想要的结果。这将评估为'AA','BB‘。
可以对任意大小的坐标列表进行比特泛化:
result = [arr[coordinate] for coordinate in coordinates ]这就是你想要的吗?
发布于 2020-09-03 07:58:04
使用列表理解的:
result = [arr[c] for c in coordinates]代码示例:
import numpy as np
arr = np.array([["AA", "AB", "AC"], ["BA", "BB", "BC"], ["CA", "CB", "CC"]])
coordinates = [(0, 0), (1, 1)]
result = [arr[c] for c in coordinates]
print(result)输出:
['AA', 'BB']发布于 2020-09-03 08:55:33
您需要使用双重索引。第一个数组被分配给x坐标,另一个数组分配给y坐标,如下所示:
x, y = np.transpose(np.array(coordinates))
arr[x, y]在使用numpy时尽量避免列表解释:)
https://stackoverflow.com/questions/63714845
复制相似问题