[Numpy-discussion] how to efficiently build an array of x, y, z points
Brennan Williams
brennan.williams at visualreservoir.com
Wed Mar 3 15:05:43 EST 2010
Bruce Southey wrote:
> On 03/02/2010 09:47 PM, David Goldsmith wrote:
>> On Tue, Mar 2, 2010 at 6:59 PM, Brennan Williams
>> <brennan.williams at visualreservoir.com
>> <mailto:brennan.williams at visualreservoir.com>> wrote:
>>
>> David Goldsmith wrote:
>> >
>> > On Tue, Mar 2, 2010 at 6:29 PM, Brennan Williams
>> > <brennan.williams at visualreservoir.com
>> <mailto:brennan.williams at visualreservoir.com>
>> > <mailto:brennan.williams at visualreservoir.com
>> <mailto:brennan.williams at visualreservoir.com>>> wrote:
>> >
>> > I'm reading a file which contains a grid definition. Each
>> cell in the
>> > grid, apart from having an i,j,k index also has 8 x,y,z
>> coordinates.
>> > I'm reading each set of coordinates into a numpy array. I
>> then want to
>> > add/append those coordinates to what will be my large
>> "points" array.
>> > Due to the orientation/order of the 8 corners of each
>> hexahedral
>> > cell I
>> > may have to reorder them before adding them to my large
>> points array
>> > (not sure about that yet).
>> >
>> > Should I create a numpy array with nothing in it and then
>> .append
>> > to it?
>> > But this is probably expensive isn't it as it creates a new
>> copy
>> > of the
>> > array each time?
>> >
>> > Or should I create a zero or empty array of sufficient size and
>> > then put
>> > each set of 8 coordinates into the correct position in that
>> big array?
>> >
>> > I don't know exactly how big the array will be (some cells are
>> > inactive
>> > and therefore don't have a geometry defined) but I do know
>> what its
>> > maximum size is (ni*nj*nk,3).
>> >
>> >
>> > Someone will correct me if I'm wrong, but this problem - the "best"
>> > way to build a large array whose size is not known beforehand -
>> came
>> > up in one of the tutorials at SciPyCon '09 and IIRC the answer was,
>> > perhaps surprisingly, build the thing as a Python list (which is
>> > optimized for this kind of indeterminate sequence building) and
>> > convert to a numpy array when you're done. Isn't that what was
>> > recommended, folks?
>> >
>> Build a list of floating point values, then convert to an array and
>> shape accordingly? Or build a list of small arrays and then somehow
>> convert that into a big numpy array?
>>
>>
>> My guess is that either way will be better than iteratively
>> "appending" to an existing array.
>>
>>
> Hi,
> Christopher Barker provided some code last last year on appending
> ndarrays eg:
> http://mail.scipy.org/pipermail/numpy-discussion/2009-November/046634.html
>
> A lot depends on your final usage of the array otherwise there are no
> suitable suggestions. That is do you need just to index the array
> using i, j, k indices (this gives you either an i by j by k array that
> contains the x, y, z coordinates) or do you also need to index the x,
> y, z coordinates as well (giving you an i by j by k by x by y by z
> array). If it is just plain storage then perhaps just a Python list,
> dict or sqlite object may be sufficient.
>
Ultimately I'm trying to build a tvtk unstructured grid to view in a
Traits/tvtk/Mayavi app. The grid is ni*nj*nk cells with 8 xyz's per cell
(hexahedral cell with 6 faces). However some cells are inactive and
therefore don't have geometry. Cells also have "connectivity" to other
cells, usually to adjacent cells (e.g. cell i,j,k connected to cell
i-1,j,k) but not always.
I'll post more comments/questions as I go.
Brennan
> There are also time and memory constraints as you can spend large
> effort just to get the input into a suitable format and memory usage.
> If you use a secondary storage like a Python list then you need memory
> to storage the list, the ndarray and all intermediate components and
> overheads.
>
> If you use scipy then you should look at using sparse arrays where
> space is only added as you need it.
>
>
> Bruce
> ------------------------------------------------------------------------
>
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>
More information about the NumPy-Discussion
mailing list