使用unravel_index查找最大数量的索引

时间:2018-08-23 07:58:01

标签: python numpy

我试图理解numpy函数

unravel_index
通过应用

来找到n维数组中最大数字的索引。我总是可以使用以下电话找到最大的电话号码:

np.where(a == a.max())[0][0]

我正尝试通过以下方式使用unravel_index

a.unravel_index([a.max()],a.shape)

但这不起作用。我该如何使用unravel_index来查找数量最大的索引?

1 个答案:

答案 0 :(得分:1)

np.unravel_index将平面索引转换为尺寸索引。因此,您需要将平面索引以及数组的形状传递给np.unravel_index。如果将多维数组转换为一维数组/向量,则平面索引是数组单元格的索引。

对于您的情况,您可能想使用np.argmax获取平面索引,然后使用np.unravel_index获取尺寸索引(如果需要):

a = np.random.rand(100, 100)
flat_idx = a.argmax()
dim_idx = np.unravel_index(flat_idx, a.shape)

返回最大值值,您现在可以同时使用两者为数组a编制索引:

print(a.flat[flat_idx])
print(a[dim_idx])

使用np.where[0][0]为第一个元素建立索引将仅适用于一维数组!
如果在不索引第一个元素的情况下调用它,它将返回与np.unravel_index几乎相同的结果。但是,尽管np.unravel_index返回整数tuple,而np.where将返回整数数组tuple
这使索引编制和找到索引的速度变慢了! np.where(a == a.max())花费的时间比np.unravel_index(a.argmax(), a.shape) 4倍。 (已测试形状为(100,100)和(1000,1000)的数组。)