Numpy 重塑行为异常

Numpy reshape behaves unexpectedly

我在正在运行的程序中间有一个 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>

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

np.random.randreturns一个np.ndarray,不共享这个属性。 (我喜欢将 ndarray 视为与 C 数组非常相似,因为你可以随心所欲地更改 'dimensions',只要你仍在查看相同的内存区域,而不是越界界,一切都会好的。)

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