By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
440,345 Members | 1,783 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 440,345 IT Pros & Developers. It's quick & easy.

problems with duplicating and slicing an array

P: n/a
Hi python gurus,
I have some questions when I'm using python numeric:

1. When I do v = u[:, :], it seems u and v still point to the same
memory. e.g. When I do v[1,1]=0, u[1,1] will be zero out as well.
What's the right way to duplicate an array? Now I have to do v =
dot(u, identity(N)), which is kind of silly.

2. Is there a way to do Matlab style slicing? e.g. if I have
i = array([0, 2])
x = array([1.1, 2.2, 3.3, 4.4])
I wish y = x(i) would give me [1.1, 3.3]
Now I'm using map, but it gets a little annoying when there are two
dimensions.
Any ideas would be deeply appreciated!

Thanks!!!

-Y
Jul 18 '05 #1
Share this Question
Share on Google+
2 Replies


P: n/a
Yun Mao wrote:
Hi python gurus,
I have some questions when I'm using python numeric:

1. When I do v = u[:, :], it seems u and v still point to the same
memory. e.g. When I do v[1,1]=0, u[1,1] will be zero out as well.
What's the right way to duplicate an array? Now I have to do v =
dot(u, identity(N)), which is kind of silly.
Hmm... I don't know Numeric, but in numarray (Numeric's replacement),
you just call the copy method:

py> u = na.arange(6, shape=(2, 3))
py> v = u.copy()
py> v[0,0] = 100
py> u
array([[0, 1, 2],
[3, 4, 5]])
py> v
array([[100, 1, 2],
[ 3, 4, 5]])
2. Is there a way to do Matlab style slicing? e.g. if I have
i = array([0, 2])
x = array([1.1, 2.2, 3.3, 4.4])
I wish y = x(i) would give me [1.1, 3.3]


This also works exactly as you'd hope in numarray.

py> i = na.array([0, 2])
py> x = na.array([1.1, 2.2, 3.3, 4.4])
py> x[i]
array([ 1.1, 3.3])

Do you have any reason that you have to use Numeric? Or can you upgrade
to numarray?

Steve
Jul 18 '05 #2

P: n/a
Yun Mao wrote:
I have some questions when I'm using python numeric: 1. When I do v = u[:, :], it seems u and v still point to the same
memory. e.g. When I do v[1,1]=0, u[1,1] will be zero out as well.
What's the right way to duplicate an array? Now I have to do v =
dot(u, identity(N)), which is kind of silly.
You can use v = 1*u or v = u.copy() to get the type of copy you want.
2. Is there a way to do Matlab style slicing?


Use the take function.

The output of the following code

from Numeric import array,take
a = array([1,2])
b = a
c = 1*a
d = a.copy()
a[0] = 3
print b
print c
print d
print take(a,[1,0,1])

is

[3 2]
[1 2]
[1 2]
[2 3 2]

Jul 18 '05 #3

This discussion thread is closed

Replies have been disabled for this discussion.