因此,当我需要做一些线性代数时,我更容易将向量看作列向量。因此我更喜欢像(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.]
答案 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”