一维 numpy 数组* 实际上是一维的 - 它在任何第二维中都没有大小,而在 MATLAB 中,“一维”数组实际上是二维的,其第二维的大小为 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)
编辑
正如 Akavall 所指出的,我还应该提到np.newaxis
将新轴添加到数组的另一种方法。虽然我个人觉得它不太直观,但np.newaxis
over的一个优点.reshape()
是它允许您以任意顺序添加多个新轴,而无需显式指定输出数组的形状,这是使用.reshape(-1, ...)
技巧无法实现的:
a = np.zeros((3, 4, 5))
print(a[np.newaxis, :, np.newaxis, ..., np.newaxis].shape)
# (1, 3, 1, 4, 5, 1)
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)
有关数组和矩阵之间差异的更多信息,请参见此处。