将numpy(n,)向量重塑为(n,1)向量

时间:2016-09-17 16:48:45

标签: python numpy

因此,当我需要做一些线性代数时,我更容易将向量看作列向量。因此我更喜欢像(n,1)这样的形状。

形状(n,)和(n,1)之间是否存在显着的内存使用差异?

什么是首选方式?

如何将(n,)向量重塑为(n,1)向量。不知怎的,b.reshape((n,1))没有做到这一点。

a = np.random.random((10,1))
b = np.ones((10,))
b.reshape((10,1))
print(a)
print(b)

[[ 0.76336295]
 [ 0.71643237]
 [ 0.37312894]
 [ 0.33668241]
 [ 0.55551975]
 [ 0.20055153]
 [ 0.01636735]
 [ 0.5724694 ]
 [ 0.96887004]
 [ 0.58609882]]
[ 1.  1.  1.  1.  1.  1.  1.  1.  1.  1.]

2 个答案:

答案 0 :(得分:5)

ndarray.reshape()返回一个新视图或一个副本(取决于新形状)。它不会修改数组。

b.reshape((10, 1))

因此实际上是无操作,因为创建的视图/副本未分配给任何东西。 “修复”很简单:

b_new = b.reshape((10, 1))

两种形状之间使用的内存量应该完全不同。 Numpy数组使用strides的概念,因此维度(10,)(10, 1)都可以使用相同的缓冲区;跳转到下一行和列的金额才会改变。

答案 1 :(得分:4)

使用python语法糖的更简单方法是使用

b.reshape(-1,1)

系统将自动计算正确的形状,而不是“ -1”