Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Creating 3d Tensor Array from 2d Array (Python)

I have two numpy arrays (4×4 each). I would like to concatenate them to a tensor of (4x4x2) in which the first ‘sheet’ is the first array, second ‘sheet’ is the second array, etc. However, when I try np.stack the output of d[1] is not showing the correct values of the first matrix.

import numpy as np
x = array([[ 3.38286851e-02, -6.11905173e-05, -9.08147798e-03,
        -2.46860166e-02],
       [-6.11905173e-05,  1.74237508e-03, -4.52140165e-04,
        -1.22904439e-03],
       [-9.08147798e-03, -4.52140165e-04,  1.91939979e-01,
        -1.82406361e-01],
       [-2.46860166e-02, -1.22904439e-03, -1.82406361e-01,
         2.08321422e-01]])
print(np.shape(x)) # 4 x 4

y = array([[ 6.76573701e-02, -1.22381035e-04, -1.81629560e-02,
        -4.93720331e-02],
       [-1.22381035e-04,  3.48475015e-03, -9.04280330e-04,
        -2.45808879e-03],
       [-1.81629560e-02, -9.04280330e-04,  3.83879959e-01,
        -3.64812722e-01],
       [-4.93720331e-02, -2.45808879e-03, -3.64812722e-01,
         4.16642844e-01]])
print(np.shape(y)) # 4 x 4

d = np.dstack((x,y))
np.shape(d) # indeed it is 4,4,2... but if I do d[1] then it is not the first x matrix.
d[1] # should be y

>Solution :

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

If you do np.dstack((x, y)), which is the same as the more explicit np.stack((x, y), axis=-1), you are concatenating along the last, not the first axis (i.e., the one with size 2):

(x == d[..., 0]).all()
(y == d[..., 1]).all()

Ellipsis (...) is a python object that means ": as many times as necessary" when used in an index. For a 3D array, you can equivalently access the leaves as

d[:, :, 0]
d[:, :, 1]

If you want to access the leaves along the first axis, your array must be (2, 4, 4):

d = np.stack((x, y), axis=0)
(x == d[0]).all()
(y == d[1]).all()
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading