Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using numpy.argmax() on multidimensional arrays

I have a 4 dimensional array, i.e., data.shape = (20,30,33,288). I am finding the index of the closest array to n using

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

I would like to use data[index] = "values" with values.shape = (20,33,288), but data[index] returns the error "index (8) out of range (0<=index<1) in dimension 0" or this operation takes a relatively long time to compute and returns a matrix with a shape that doesn't seem to make sense.

How do I return a array of correct values? i.e.,

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

This seems like a simple problem, is there a simple answer?

I would eventually like to find index2 = abs(data - n2).argmin(axis = 1), so I can perform an operation, say sum data at index to data at index2 without looping through the variables. Is this possible?

I am using python2.7 and numpy version 1.5.1.

like image 236
NPB Avatar asked Apr 27 '11 01:04

NPB


People also ask

Can you create multi dimensional arrays using NumPy?

In general numpy arrays can have more than one dimension. One way to create such array is to start with a 1-dimensional array and use the numpy reshape() function that rearranges elements of that array into a new shape.

How do you use argmax?

Argmax is a mathematical function. It is typically applied to another function that takes an argument. For example, given a function g() that takes the argument x, the argmax operation of that function would be described as follows: result = argmax(g(x))


1 Answers

You should be able to access the maximum values indexed by index using numpy.indices():

x, z, t = numpy.indices(index.shape)
data[x, index, z, t]
like image 184
Sven Marnach Avatar answered Sep 21 '22 15:09

Sven Marnach