对多维数组使用numpy.argmax()

14 投票
2 回答
8848 浏览
提问于 2025-04-16 16:29

我有一个四维数组,也就是 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<=index<1) in dimension 0",或者这个操作计算起来比较慢,返回的矩阵形状看起来也不太对。

我该如何返回一个正确的值数组呢?也就是说,

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

这看起来是个简单的问题,有没有简单的解决办法呢?

我最终想找到 index2 = abs(data - n2).argmin(axis = 1),这样我就可以在不循环变量的情况下,把某个索引的数据加到 index2 的数据上。这可能吗?

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

2 个回答

1

如果我理解得没错,这段代码应该可以运行:

numpy.put(data, index, values)

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

15

你可以通过 numpy.indices() 来获取由 index 索引的最大值:

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

撰写回答