[SciPy-user] Create n-dim array from axis
Vincent Schut
schut at sarvision.nl
Tue Mar 24 11:35:11 EDT 2009
>
> This is a good example for using slices and mgrid and is much better
> for regularly spaced grids (representable of slices) than what I had.
> However, what I also needed in the past was building a grid for
> arbitrary points in each dimension
>
> a made-up example
> x = [2, 3, 5, 10]
> y = [0, 1]
> z = [100, 200, 500, 1000]
> create_array(x, y, z)
> ?
>
Hmm, tricky...
I'd go for something like this:
def create_array2(nodes):
# nodes is a list with lists of axis points (e.g. [[2, 3, 5, 10],
[0, 1], [100, 200, 500, 1000]]
shape = tuple([len(a) for a in nodes])
idx = numpy.indices(shape)
result = numpy.zeros(idx.shape, numpy.float)
for d in range(idx.shape[0]):
result[d] = numpy.take(nodes[d], idx[d])
return result.transpose()
create_array2([[0.0, 0.5, 1], [2.0, 2.5, 3]])
though this stil contains a loop which might be avoidable... It ought to
be pretty generic though. It's the end of the working day here, and I'm
starting to get a bit fuzzy in the brains, so better solutions might
very well be possible.
Vincent.
More information about the SciPy-User
mailing list