【问题标题】:Using numpy.argmax() on multidimensional arrays在多维数组上使用 numpy.argmax()
【发布时间】: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。

【问题讨论】:

    标签: python indexing numpy closest


    【解决方案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。我相信斯文的回答会奏效。
    猜你喜欢
    • 2014-06-11
    • 2011-08-04
    • 2013-09-30
    • 2014-05-14
    • 2014-12-25
    • 2010-10-17
    • 2013-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多