Numpy reshape表现出乎意料

时间:2015-01-02 23:13:43

标签: python numpy reshape

我在正在运行的程序中间有一个numpy矩阵(假设它的名字是rdy)。我发现将其重塑为一维矩阵可以得到一个二维矩阵。但是如果我在交互式shell中尝试相同的东西,我会得到预期的结果。像下面的ipython日志一样。我想知道矩阵rdy的哪个方面导致它在重塑时表现不同?

# This is expected:
In [191]: np.random.rand(512, 1).reshape(-1).shape
Out[191]: (512,)

# This is unexpected:
In [192]: rdy.reshape(-1).shape
Out[192]: (1, 512)

# The following are the different aspects of the rdy matrix:
In [193]: rdy.shape
Out[193]: (512, 1)

In [194]: rdy.flags
Out[194]: 
  C_CONTIGUOUS : True
  F_CONTIGUOUS : False
  OWNDATA : False
  WRITEABLE : True
  ALIGNED : True
  UPDATEIFCOPY : False

In [195]: rdy.data
Out[195]: <read-write buffer for 0xeae6488, size 4096, offset 0 at 0x2ff95e70>

1 个答案:

答案 0 :(得分:2)

np.matrix的一个关键定义属性是它将通过常见变换保留为二维对象。 (毕竟,这几乎就是矩阵的定义。)

np.random.rand会返回np.ndarray,但不会共享此属性。 (我喜欢把ndarray看成与C数组非常相似,因为你可以改变你所喜欢的'尺寸',只要你仍然在看同一个记忆区域,而不是超越边界,一切都会好的。)

如果您希望矩阵表现为数组,可以convert it to one