[SciPy-user] Slicing 3D array using two 1D arrays not working
Thu May 22 12:50:48 CDT 2008
I am trying to extract a subset of the original array. 'a' is a 3D array of (levels,nodes,variables). The values
So lets say I have an array where a.shape = (6,21216,2) i.e 6 levels,21216 nodes and 2 data variables and I need only the data at 1st and 4th levels and at nodes 10,100 and 2400.
I want to make a new array b where b.shape(2,3,2)
b[0,0,:] = data variables at 1st level and node 10
b[0,1,:] = data variables at 1st level and node 100
b[0,1,:] = data variables at 1st level and node 2400
b[1,0,:] = data variables at 4th level and node 10
b[1,1,:] = data variables at 4th level and node 100
b[1,1,:] = data variables at 4th level and node 2400
I'm reading through your description of ix_ to see if I understand whats happening
>>> "Travis E. Oliphant" <email@example.com> 5/22/2008 12:07 PM >>>
Dharhas Pothina wrote:
> I have an array a 3D array 'a' (a.shape = a(6, 21216, 2) ) and I want to slice it using a[levels,nodes,:] where
> levels=array([2,4]),nodes=array([12,1234,4566,1233]) etc.
> I can do
> but if I try
> ValueError: shape mismatch: objects cannot be broadcast to a single shape
> is there something I am doing wrong or is this just not possible?
What is a[levels, nodes, :] supposed to return? If you are expecting
the cross-product, then I suspect what you want is
il, in = numpy.ix_(levels, nodes)
c = a[il, in,:]
Indexing with a list in NumPy returns an "element-byelement" result so
the two indexing lists have to have commensurate shapes. You get the
cross-product by fiddling with the dimensions and turn levels into a
(2,1)-array and nodes into a (1,4)-array. Then broadcasting handles
createing the (2,4)-shape set of indices that you may have been expecting.
That's all numpy.ix_ does is fiddle with the shapes to give you index
arrays for getting the cross-product.
SciPy-user mailing list
More information about the SciPy-user