向现有 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]]])
我的问题如下:
-
a
的尺寸是 3 X 2 是否正确?换句话说,一个 3 X 2 矩阵?
-
a[np.newaxis,:,:]
的尺寸是 1 X 3 X 2 对吗?换句话说,一个包含3 X 2矩阵的矩阵?
-
a[:,np.newaxis,:]
的尺寸是 3 X 1 X 2 对吗?换句话说一个矩阵包含 3 1 X 2 矩阵?
-
a[:,:,np.newaxis]
的尺寸是 3 X 2 X1 对吗?换句话说,一个矩阵包含 3 个矩阵,每个矩阵包含 2 1 X 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]
我试图通过经典线性代数在 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]]])
我的问题如下:
-
a
的尺寸是 3 X 2 是否正确?换句话说,一个 3 X 2 矩阵? -
a[np.newaxis,:,:]
的尺寸是 1 X 3 X 2 对吗?换句话说,一个包含3 X 2矩阵的矩阵? -
a[:,np.newaxis,:]
的尺寸是 3 X 1 X 2 对吗?换句话说一个矩阵包含 3 1 X 2 矩阵? -
a[:,:,np.newaxis]
的尺寸是 3 X 2 X1 对吗?换句话说,一个矩阵包含 3 个矩阵,每个矩阵包含 2 1 X 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]