我试图理解numpy函数
unravel_index
通过应用来找到n维数组中最大数字的索引。我总是可以使用以下电话找到最大的电话号码:
np.where(a == a.max())[0][0]
我正尝试通过以下方式使用unravel_index
:
a.unravel_index([a.max()],a.shape)
但这不起作用。我该如何使用unravel_index
来查找数量最大的索引?
答案 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)的数组。)