469,964 Members | 1,570 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,964 developers. It's quick & easy.

Dynamically growing numarray array.

Hello All,

this seems like a trivial problem, but I just can't find an elegant
solution neither by myself, nor with google's help.

I'd like to be able to keep an array representing coordinates for a
system of points.
Since I'd like to operate on each point's coordinates individually,
for speed and ufuncs
numarray fits the bill perfectly, especially since system.coordinates
[4] would return proper vector for a 5th point.
To start, read the coordinates from a text file and add them to our
array one by one.
Here it gets un-elegant and probably wasteful for a large number of
points, by converting the whole array to a list only to use append
method and then convert it back to array(sample code below). Also,
there is potential need to add more points later on.

Any pointers would be greatly appreciated.

from numarray import array
p1 = [0,0,1]
p2 = [0,0,2]
p3 = [0,0,3]
a1 = array((p1,p2))
a1array([[0, 0, 1], [0, 0, 2]]) a2 = array((a1,p3))Traceback (most recent call last): File "<stdin>", line 1, in ?
File "/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/
site-packages/numarray/numarraycore.py", line 417, in array return
fromlist(sequence,type,shape)
File "/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/
site-packages/numarray/numarraycore.py", line 267, in fromlist
arr.fromlist(seq)
ValueError: Nested sequences with different lengths. temp = list(a1)
temp.append(p3)
a2 = array(temp)
a2array([[0, 0, 1],

[0, 0, 2],
[0, 0, 3]])
Mar 22 '06 #1
1 1927
Ivan Vinogradov wrote:
Hello All,

this seems like a trivial problem, but I just can't find an elegant
solution neither by myself, nor with google's help.

I'd like to be able to keep an array representing coordinates for a
system of points.
Since I'd like to operate on each point's coordinates individually,
for speed and ufuncs
numarray fits the bill perfectly, especially since system.coordinates
[4] would return proper vector for a 5th point.
To start, read the coordinates from a text file and add them to our
array one by one.
Here it gets un-elegant and probably wasteful for a large number of
points, by converting the whole array to a list only to use append
method and then convert it back to array(sample code below). Also,
there is potential need to add more points later on.

Any pointers would be greatly appreciated.


Very simple thing to do, actually. The following class implements a
very basic array grower for an array of 3-D points:

class ArrayGrower(object):
def __init__(self,initsize=100):
self.memarray = zeros((initsize,3),Float)
self.npoints = 0
def add_point(self,point):
if self.npoints >= len(self.memarray):
oldlen = len(self.memarray)
newmemarray = zeros((oldlen*2,3),Float)
newmemarray[:oldlen] = self.memarray
self.memarray = newmemarray
self.memarray[self.npoints] = point
self.npoints += 1
def get_current_array(self):
return self.memarray[:self.npoints]

It simply uses a slice of a larger array to hold all your points. It
keeps track of the number of points and automatically grows the array
when there's no room to add another point. (You can use a factor less
than 2 if you have to conserve memory.) Whenever you need the current
array for a calculation, use get_current_array() to get an array slice
of the proper size.
x = ArrayGrower(2)
x.add_point([0,1,2])
x.get_current_array() array([ [ 0., 1., 2.]]) x.add_point([0,0,0])
x.add_point([1,1,1])
x.get_current_array()

array([[ 0., 1., 2.],
[ 0., 0., 0.],
[ 1., 1., 1.]])
Carl Banks

Mar 23 '06 #2

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

4 posts views Thread by Marco Bubke | last post: by
2 posts views Thread by Marc Schellens | last post: by
3 posts views Thread by SunX | last post: by
6 posts views Thread by Gaubitzer Erwin | last post: by
6 posts views Thread by Michael Drumheller | last post: by
4 posts views Thread by Ben Champion | last post: by
7 posts views Thread by Fabian Wauthier | last post: by
reply views Thread by andrewfelch | last post: by
1 post views Thread by rainxy | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.