Numpy:将一维索引转换为多维索引

4

许多数组方法返回单个索引,尽管数组是多维的。例如:

a = rand(2,3)
z = a.argmax()

对于二维矩阵,查找最大元素的索引非常容易:

a[z/3, z%3]

但是对于更多维度,这可能会变得很麻烦。Numpy/Scipy有一种简单的方法可以返回在一个(折叠的)维度中给定索引时在多个维度中的索引吗?谢谢。


也许有点烦人,但是完全可行。 - Hamish Grubijan
确实是这样!请看下面。 - Steve Tjoa
2个回答

6

明白了!

a = X.argmax()
(i,j) = unravel_index(a, X.shape)

1
谢谢,这很有趣,它实际上帮助我解决了一些问题,这些问题我自己的解决方案无法解决,除非使用一些技巧,其中b的形状是a形状的扩展。 - Vincent Marchetti

1

我不知道有没有内置函数可以做到你想要的,但是当我遇到这种情况时,我意识到我真正想做的是:

给定两个形状相同的数组a、b,找到与a的最大元素相同位置(相同的[i,j,k...]位置)的b元素

对于此问题,快速的numpy解决方案是:

j = a.flatten().argmax()
corresponding_b_element = b.flatten()[j]

文斯·马奇蒂


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接