我一般使用MATLAB和Octave,我最近切换到python numpy.在我定义像这样的数组时numpy
>>> a = np.array([[2,3],[4,5]])
Run Code Online (Sandbox Code Playgroud)
它工作得很好,阵列的大小是
>>> a.shape
(2, 2)
Run Code Online (Sandbox Code Playgroud)
这与MATLAB相同但是当我提取第一个整列并查看大小时
>>> b = a[:,0]
>>> b.shape
(2,)
Run Code Online (Sandbox Code Playgroud)
我得到大小(2,),这是什么?我希望它的大小(2,1).也许我误解了这个基本概念.任何人都可以让我明白这个?
1D numpy数组*实际上是1D - 它在任何第二维中都没有大小,而在MATLAB中,'1D'数组实际上是2D,其第二维的大小为1.
如果您希望阵列的第二维尺寸为1,则可以使用其.reshape()方法:
a = np.zeros(5,)
print(a.shape)
# (5,)
# explicitly reshape to (5, 1)
print(a.reshape(5, 1).shape)
# (5, 1)
# or use -1 in the first dimension, so that its size in that dimension is
# inferred from its total length
print(a.reshape(-1, 1).shape)
# (5, 1)
Run Code Online (Sandbox Code Playgroud)
正如Akavall指出的那样,我还应该提到np.newaxis另一种向数组添加新轴的方法.虽然我个人觉得有点不太直观的一个优势np.newaxis比.reshape()的是,它可以让你以任意顺序添加多个新的轴没有明确指定输出数组,这是不可能的形状.reshape(-1, ...)伎俩:
a = np.zeros((3, 4, 5))
print(a[np.newaxis, :, np.newaxis, ..., np.newaxis].shape)
# (1, 3, 1, 4, 5, 1)
Run Code Online (Sandbox Code Playgroud)
np.newaxis只是一个别名None,所以你可以做一些更紧凑的使用相同的东西a[None, :, None, ..., None].
*np.matrix另一方面,An 始终是2D,它将为您提供MATLAB中熟悉的索引行为:
a = np.matrix([[2, 3], [4, 5]])
print(a[:, 0].shape)
# (2, 1)
Run Code Online (Sandbox Code Playgroud)
有关数组和矩阵之间差异的更多信息,请参见此处.
| 归档时间: |
|
| 查看次数: |
1374 次 |
| 最近记录: |