Numpy的重新形状操作表现出意外行为

3

我正在运行一个程序,其中有一个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个回答

2
一个定义 np.matrix 的关键属性是,它将通过常见的转换保持为二维对象。 (毕竟,这几乎就是矩阵的定义。) np.random.rand 返回一个不具备此属性的 np.ndarray。(我喜欢认为 ndarray 类似于 C 数组,您可以随意更改“维度”,只要您仍然查看相同的内存区域,并且不越界,一切都会很好。)
如果您希望矩阵表现得像数组,您可以将其 转换为数组

谢谢,是的,这很有道理。rdy是从稀疏矩阵上进行todense调用后得到的结果。我不知道它会给出与ndarray不同的类型。 - shaoyl85
1
使用 asparse.Aasparse.toarray() 从稀疏矩阵中生成数组。 - hpaulj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接