2011-04-27 85 views
10

我有一个4维数组,即data.shape = (20,30,33,288)。我发现最接近阵列到n的使用在多维数组上使用numpy.argmax()

index = abs(data - n).argmin(axis = 1), so 
index.shape = (20,33,288) with the indices varying. 

索引I想用data[index] = "values"values.shape = (20,33,288),但data[index]返回错误“索引(8)超出范围(0 < =索引< 1)在维度0“或此操作需要相当长的时间来计算并返回一个形状似乎没有意义的矩阵。

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

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

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

我最终想找到index2 = abs(data - n2).argmin(axis = 1),所以我可以执行一个操作,比如索引处的sum数据到index2处的数据,而不需要循环变量。这可能吗?

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

回答

12

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

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

当人们不知道ndim时,还有答案吗? – 2012-08-18 16:10:28

+3

@AndreasMueller:是的,使用'tup [:axis] +(index,)+ tup [axis:]'作为'data'的索引,其中'tup'是'numpy.indices()'返回的元组。 – 2012-08-22 21:42:37

1

如果我理解正确的话,这应该工作:

numpy.put(data, index, values) 

我学到新的东西今天,谢谢。

+0

感谢您的答复。我没有“价值”,所以我不认为我可以使用numpy.put。我相信斯文的答案会奏效。 – NPB 2011-04-27 15:44:58