在多维数组上使用 numpy.argmax()

Posted

技术标签:

【中文标题】在多维数组上使用 numpy.argmax()【英文标题】:Using numpy.argmax() on multidimensional arrays 【发布时间】:2011-08-13 11:47:44 【问题描述】:

我有一个 4 维数组,即data.shape = (20,30,33,288)。我正在使用

找到最接近 n 的数组的索引
index = abs(data - n).argmin(axis = 1), so
index.shape = (20,33,288) with the indices varying. 

我想将data[index] = "values"values.shape = (20,33,288) 一起使用,但data[index] 返回错误“index (8) out of range (0或者这个操作需要相对较长的时间来计算并返回一个形状似乎没有意义的矩阵。

如何返回正确值的数组?即,

data[index] = "values" with values.shape = (20,33,288)

这似乎是一个简单的问题,有简单的答案吗?

我最终想找到index2 = abs(data - n2).argmin(axis = 1),这样我就可以执行一个操作,比如将索引处的数据与索引2 处的数据相加,而无需遍历变量。这可能吗?

我使用的是 python2.7 和 numpy 版本 1.5.1。

【问题讨论】:

【参考方案1】:

您应该能够使用numpy.indices() 访问由index 索引的最大值:

x, z, t = numpy.indices(index.shape)
data[x, index, z, t]

【讨论】:

不知道ndim的时候也有答案吗? @AndreasMueller:是的,使用tup[:axis] + (index,) + tup[axis:] 作为data 的索引,其中tupnumpy.indices() 返回的元组。【参考方案2】:

如果我理解正确,这应该可以:

numpy.put(data, index, values)

我今天学到了一些新东西,谢谢。

【讨论】:

感谢您的回复。我没有“价值观”,所以我认为我不能使用 numpy.put。我相信斯文的回答会奏效。

以上是关于在多维数组上使用 numpy.argmax()的主要内容,如果未能解决你的问题,请参考以下文章

如何在多维数组上使用 LINQ 来“展开”数组?

使用 CURL 发布多维数组并在服务器上获取结果

Java多维数组使用注意事项

将多维数组插入另一个多维数组

在多维数组上使用数组u map()

3.6 多维数组