Nic*_*ger 3 python arrays numpy scipy
当使用numpy.reshape展平某些numpy数组时,我遇到了看似不一致的结果.有时如果我重塑一个数组,它会返回一个包含一行的2D数组,而如果我先复制数组然后执行完全相同的操作,它将返回一维数组.
这似乎主要发生在将numpy数组与scipy数组合并时,并且当我想稍后将平顶数组乘以矩阵时会产生对齐问题.
例如,请考虑以下代码:
import numpy as np
import scipy.sparse as sps
n = 10
A = np.random.randn(n,n)
I = sps.eye(n)
X = I+A
x1 = np.reshape(X, -1)
x2 = np.reshape(np.copy(X), -1)
print 'x1.shape=', x1.shape
print 'x2.shape=', x2.shape
Run Code Online (Sandbox Code Playgroud)
运行时打印:
x1.shape= (1, 100)
x2.shape= (100,)
Run Code Online (Sandbox Code Playgroud)
numpy.flatten()也会发生同样的事情.这里发生了什么?这种行为是故意的吗?
您将稀疏矩阵对象和普通ndarray一起添加:
X = I+A
Run Code Online (Sandbox Code Playgroud)
结果是一个密集的矩阵对象,一个实例np.matrix,而不是一个普通的ndarray.
这个:
np.reshape(X, -1)
Run Code Online (Sandbox Code Playgroud)
最终返回一个不能小于2D的矩阵.
这个:
np.reshape(np.copy(X), -1)
Run Code Online (Sandbox Code Playgroud)
使得正常的ndarray np.copy(X),所以你得到一个1D输出np.reshape.
在任何时候都要非常小心,无论是处理稀疏矩阵,密集矩阵还是标准ndarray.np.matrix尽可能避免.
| 归档时间: |
|
| 查看次数: |
157 次 |
| 最近记录: |