向现有 np 数组添加维度

adding dimensions to existing np arrays

我试图通过经典线性代数在 numpy 数组的维度和矩阵的维度之间建立清晰的联系。假设如下:

In [1]  import numpy as np
In [2]  rand = np.random.RandomState(42)
In [3]  a = rand.rand(3,2)
In [4]  a
Out[4]:
array([[0.61185289, 0.13949386],
       [0.29214465, 0.36636184],
       [0.45606998, 0.78517596]])
In [5]: a[np.newaxis,:,:]
Out[5]:
array([[[0.61185289, 0.13949386],
        [0.29214465, 0.36636184],
        [0.45606998, 0.78517596]]])
In [6]: a[:,np.newaxis,:]
Out[6]:
array([[[0.61185289, 0.13949386]],

       [[0.29214465, 0.36636184]],

       [[0.45606998, 0.78517596]]])

In [7]: a[:,:,np.newaxis]
Out[7]:
array([[[0.61185289],
        [0.13949386]],

       [[0.29214465],
        [0.36636184]],

       [[0.45606998],
        [0.78517596]]])

我的问题如下:

  1. a 的尺寸是 3 X 2 是否正确?换句话说,一个 3 X 2 矩阵?
  2. a[np.newaxis,:,:] 的尺寸是 1 X 3 X 2 对吗?换句话说,一个包含3 X 2矩阵的矩阵?
  3. a[:,np.newaxis,:] 的尺寸是 3 X 1 X 2 对吗?换句话说一个矩阵包含 3 1 X 2 矩阵?
  4. a[:,:,np.newaxis] 的尺寸是 3 X 2 X1 对吗?换句话说,一个矩阵包含 3 个矩阵,每个矩阵包含 2 1 X 1 矩阵?
  1. 三个 2x1 矩阵,每个矩阵包含一个大小为 1 的向量

只需使用 .shape:

找出
import numpy as np

rand = np.random.RandomState(42)

# 1.
a = rand.rand(3, 2)
print(a.shape, a, sep='\n', end='\n\n')

# 2.
b = a[np.newaxis, :, :]
print(b.shape, b, sep='\n', end='\n\n')

# 3.
c = a[:, np.newaxis, :]
print(c.shape, c, sep='\n', end='\n\n')

# 4.a
d = a[:, :, np.newaxis]
print(d.shape, d, sep='\n', end='\n\n')

# 4.b
print(d[0].shape, d[0], sep='\n', end='\n\n')
print(d[0, 0].shape, d[0, 0])

输出:

(3, 2)
[[0.37454012 0.95071431]
 [0.73199394 0.59865848]
 [0.15601864 0.15599452]]

(1, 3, 2)
[[[0.37454012 0.95071431]
  [0.73199394 0.59865848]
  [0.15601864 0.15599452]]]

(3, 1, 2)
[[[0.37454012 0.95071431]]

 [[0.73199394 0.59865848]]

 [[0.15601864 0.15599452]]]

(3, 2, 1)
[[[0.37454012]
  [0.95071431]]

 [[0.73199394]
  [0.59865848]]

 [[0.15601864]
  [0.15599452]]]

(2, 1)
[[0.37454012]
 [0.95071431]]

(1,) [0.37454012]