gpt4 book ai didi

python - Numpy reshape 对复制数组和未复制数组的作用不同

转载 作者:太空宇宙 更新时间:2023-11-03 14:09:38 27 4
gpt4 key购买 nike

在使用 numpy.reshape 展平某些 numpy 数组时,我遇到了看似不一致的结果。有时,如果我 reshape 一个数组,它会返回一个只有一行的二维数组,而如果我先复制该数组然后执行完全相同的操作,它会返回一个一维数组。

这似乎主要发生在将 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

运行时打印:

x1.shape= (1, 100)
x2.shape= (100,)

同样的事情发生在 numpy.flatten() 上。这里发生了什么?这种行为是故意的吗?

最佳答案

您将一个稀疏矩阵对象和一个普通的 ndarray 添加在一起:

X = I+A

结果是一个密集的 matrix 对象,它是 np.matrix 的一个实例,而不是一个普通的 ndarray。

这个:

np.reshape(X, -1)

最终返回一个矩阵,它不能小于 2D。

这个:

np.reshape(np.copy(X), -1)

np.copy(X) 中创建一个普通的 ndarray,因此您可以从 np.reshape 获得一维输出。

无论您处理的是稀疏矩阵、稠密矩阵还是标准 ndarray,请始终非常小心。尽可能避免 np.matrix

关于python - Numpy reshape 对复制数组和未复制数组的作用不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39926628/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com