猿问

如何使用坐标列表从 2d numpy 数组中最好地选择值?

我试图了解使用坐标列表(不使用循环)从 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]

想法?


慕勒3428872
浏览 178回答 3
3回答

波斯汪

您需要使用双索引。第一个数组分配给x坐标,另一个数组分配给y坐标,如下所示:x, y = np.transpose(np.array(coordinates)) arr[x, y]使用时尽量避免列表理解numpy:)

MM们

我的意思是你总是可以做[arr[coordinates[0]],arr[coordinates[1]]]得到你想要的结果。这将评估为 ['AA','BB']。对您可以执行的任何大小的坐标列表进行概括:result = [arr[coordinate] for coordinate in coordinates ]这就是你想要的吗?

千巷猫影

使用列表理解:result = [arr[c] for c in coordinates]代码示例:import numpy as nparr = 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']
随时随地看视频慕课网APP

相关分类

Python
我要回答