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)
2条答案
按热度按时间njthzxwz1#
1D numpy数组 * 实际上是1D的--它在任何第二维度上都没有大小,而在MATLAB中,'1D'数组实际上是2D的,其第二维度的大小为1。
如果你想让你的数组在第二维中的大小为1,你可以使用它的
.reshape()
方法:编辑
正如Akavall所指出的,我还应该提到
np.newaxis
作为另一种向数组添加新轴的方法,虽然我个人觉得它不太直观,但np.newaxis
相对于.reshape()
的一个优点是,它允许您以任意顺序添加多个新轴,而无需显式指定输出数组的形状,这是.reshape(-1, ...)
技巧所不可能实现的:np.newaxis
只是None
的一个别名,因此您可以使用a[None, :, None, ..., None]
更简洁地执行相同的操作。np.matrix
始终是2D的,并且将提供您在MATLAB中熟悉的索引行为:有关数组和矩阵之间区别的更多信息,请参见此处。
4dc9hkyq2#
输入
help(np.shape)
可以让你对这里发生的事情有一些了解,对于初学者来说,你可以通过输入以下命令得到你想要的输出:基本上numpy的定义与MATLAB稍有不同。在numpy环境中,向量只有一维,而数组是向量的向量,因此它可以有更多。在第一个示例中,数组是两个向量的向量,即:
所以
a
有两个维度,在你的例子中,两个维度的元素数是一样的,都是2,所以你的数组是2乘2,当你从这个数组中取出一个切片时,你的维度数减少了一,换句话说,你从数组中取出一个向量,这个向量只有一个维度,也有两个元素,就这样了,你的向量现在是2乘 _,在第二个点什么都没有,因为向量没有定义。你也可以从空间的Angular 来考虑,第一个数组在空间
R^(2x2)
中,第二个向量在空间R^(2)
中,这意味着数组定义在一个与向量不同(且更大)的空间中。这基本上就是说,你从数组中取出了一个切片,与MATLAB不同,numpy不像表示数组(二维或多维)那样表示向量(一维)。