# [Numpy-discussion] two tricky operations

Rick White rlw at stsci.edu
Thu May 2 11:59:18 EDT 2002

```Since nobody else has replied to this yet, I'll take a crack at it.

On Thu, 2 May 2002, Pete Shinners wrote:

> help, i need help formatting some data in Numeric arrays. i can't quite
> seem to make it happen. here they come... (beware)
>
> 1: i want to create a simple 3d array, so that accessing it with any two
> indices gives me the same result as those two indices..
> 	myarray[1,2] == 1,2
> 	myarray[4,4] == 4,4
> i would assume this just involves mixing two arange()'s together, but i
> can't seem to get them meshed together correctly. actually, this is
> something i think i'd want quite a bit, it'd be real real nice if arange
> could take multiple axes. :]  i thought this might be a good
> "fromfunction" situation, but i couldn't get that to go either.

This works.  I don't know whether it is optimal, though I think it
isn't bad.  Note that the returned values are 2-element Numeric arrays,
not tuples.  Seems to me that arrays are a lot more usable as return
values.

def twod(n,m):
a = zeros((n,m,2))
b = arange(n*m)
a[:,:,0] = transpose(reshape(b % n, (m,n)))
a[:,:,1] = reshape(b % m, (n,m))
return a

> 2: i have a 3d array with image data (RGBs). i want to flatten only the
> first two dimensions so i have an array of RGB values. this one's got me
> completely stumped. i'm hoping there's just some function i'm not seeing
> in the docs, but i'd be just as happy with a bit of Numeric magic.

It's not clear to me what you mean here.  If you have an array with
shape (n,m,3) and want to get (n*m,3), just use reshape(a,(n*m,3)).
Maybe you mean something more complicated than that?
Rick

------------------------------------------------------------------
Richard L. White    rlw at stsci.edu    http://sundog.stsci.edu/rick/
Space Telescope Science Institute
Baltimore, MD

```