[SciPy-user] 3d arrays
Steve Schmerler
elcorto at gmx.net
Thu Aug 23 15:08:44 EDT 2007
Perez Kawumi wrote:
> Hi ,
> Sorry got myself very confused before I sent out that email. When i solve this equation I get a 1*2 matrix as shown.
>
> b(1)*a(1,:) + b(2)*a(2,:) + b(3)*a(3,:) = [25 18]
As mentioned earlier, it would be really, really nice if you'd learn some numpy
basics and terminology (especially numpy array indexing) from the docs at
scipy.org.
This would make it a lot easier to communicate you problems. Questions like
"please translate my <some_other_language>-code to numpy" is in general not a
very kind thing to do, even though many people on this list are very fluent
with Matlab which increases your chances. My own Matlab days are some time ago
but I guess I can help you out.
>
> I want to assign all x and y coordinates in the first plane to have the value 25 and all the x and y coordinates in the second plane to the value 18. Which as you notice are the first and second elements of the eqn above.
>
> Do you know how to do this in python? Sorry it was badly phrased ealier. Hope this makes more sense.
> Thanks Perez
>
If I translate correctly, you have an array of shape (2,N,M), that is, two NxM
arrays "stacked behind one another", like that (here: N = M = 3):
In [75]: a = ones((2,3,3))
In [76]: a
Out[76]:
array([[[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]],
[[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]]])
In [81]: a.shape
Out[81]: (2, 3, 3)
Along the 1st axis (of length 2), you have two 2d-arrays, of which each
spans across the 2nd and 3rd axis (your "x and y coordinates").
Then you want all elements of the first 3x3 array to be 25:
In [82]: a[0,...] = 25
In [83]: a
Out[83]:
array([[[ 25., 25., 25.],
[ 25., 25., 25.],
[ 25., 25., 25.]],
[[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]]])
This is the same as a[0,:,:] = 25 and a[0,::] = 25. The 0 is an index into the
first axis, and there the first element, which is the first 3x3 array. The ...
or :,: say "take all of the remaining axes", as you know from Matlab. For the
second 3x3 array:
In [84]: a[1,...] = 18
> P.S. Can you create a 3 dimensional matrix say by just doing this
> d = random.random(3,3,2)*10
>
You mean without the ()'s arround (3,3,2)? No. The argument you give must be a
tuple determining the shape of the desired array.
Also: Make sure that you understand that array != matrix in numpy! numpy.matrix
converts arrays into objects which behave much more like Matlab matrices: you
can have row and column vectors, which are treated as matrices (shape (1,N),
(N,1)) and much more.
For example, see
http://scipy.org/Tentative_NumPy_Tutorial#head-926a6c9b68b752eed8a330636c41829e6358b1d3
http://scipy.org/NumPy_for_Matlab_Users#head-e9a492daa18afcd86e84e07cd2824a9b1b651935
for matrix and
http://scipy.org/Numpy_Example_List#newaxis
for a way to turn a numpy 1d-array of shape (N,) into a 2d one with shape, say
(N, 1) to also emulate Matlab.
> Matlab
>
>>> a = ([2,3;4,6;5,1])
> a =
> 2 3
> 4 6
> 5 1
>>> b = ([1,2,3])
> b =
> 1 2 3
>
>>> c(1,1,:)= b(1)*a(1,:) + b(2)*a(2,:) + b(3)*a(3,:)
> c(:,:,1) =
> 25
>
> c(:,:,2) =
> 18
--
cheers,
steve
I love deadlines. I like the whooshing sound they make as they fly by. --
Douglas Adams
More information about the SciPy-User
mailing list