开发者

Contruct 3d array in numpy from existing 2d array

During preparing data for NumPy calculate开发者_开发技巧. I am curious about way to construct:

myarray.shape => (2,18,18)

from:

d1.shape => (18,18)
d2.shape => (18,18)

I try to use NumPy command:

hstack([[d1],[d2]])

but it looks not work!


Just doing d3 = array([d1,d2]) seems to work for me:

>>> from numpy import array
>>> # ... create d1 and d2 ...
>>> d1.shape
(18,18)
>>> d2.shape
(18,18)
>>> d3 = array([d1, d2])
>>> d3.shape
(2, 18, 18)


hstack and vstack do no change the number of dimensions of the arrays: they merely put them "side by side". Thus, combining 2-dimensional arrays creates a new 2-dimensional array (not a 3D one!).

You can do what Daniel suggested (directly use numpy.array([d1, d2])).

You can alternatively convert your arrays to 3D arrays before stacking them, by adding a new dimension to each array:

d3 = numpy.vstack([ d1[newaxis,...], d2[newaxis,...] ])  # shape = (2, 18, 18)

In fact, d1[newaxis,...].shape == (1, 18, 18), and you can stack both 3D arrays directly and get the new 3D array (d3) that you wanted.


arr3=np.dstack([arr1, arr2])

arr1, arr2 are 2d array shape (256,256), arr3: shape(256,256,2)


A lot of versatility is provided by the np.stack() function. You can say:

>>> d3 = np.stack([d1, d2])
>>> d3.shape
(2, 18, 18)

However you can also specify the axis, along which the arrays get joined. So if you wanted to join channels of a RGB image, you say:

>>> d3 = np.stack([d1, d2], axis=-1)
>>> d3.shape
(18, 18, 2)
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜