因此,当我需要做一些线性代数时,我更容易将向量看作列向量.因此我更喜欢像(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.]
Run Code Online (Sandbox Code Playgroud)
ndarray.reshape()返回一个新视图或一个副本(取决于新形状).它不会修改数组.
b.reshape((10, 1))
Run Code Online (Sandbox Code Playgroud)
因此,实际上是无操作,因为创建的视图/副本没有分配给任何东西."修复"很简单:
b_new = b.reshape((10, 1))
Run Code Online (Sandbox Code Playgroud)
两种形状之间使用的内存量应该完全不同.Numpy数组使用步幅的概念,因此维度(10,)和(10, 1)都可以使用相同的缓冲区; 跳转到下一行和列的数量只是改变.
小智 8
使用 python 语法糖更简单的方法是使用
b.reshape(-1,1)
Run Code Online (Sandbox Code Playgroud)
系统将自动计算正确的形状而不是“-1”
| 归档时间: |
|
| 查看次数: |
9796 次 |
| 最近记录: |