【问题标题】:Numpy reshape behaves unexpectedlyNumpy 重塑行为出乎意料
【发布时间】:2015-03-01 05:42:06
【问题描述】:

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

【问题讨论】:

    标签: python numpy reshape


    【解决方案1】:

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

    np.random.rand 返回一个np.ndarray,它不共享此属性。 (我喜欢认为 ndarray 与 C 数组非常相似,因为您可以随心所欲地更改“维度”,只要您仍在查看相同的内存区域,而不是越界,一切都会好起来的。)

    如果你想让矩阵表现得像一个数组,你可以convert it to one

    【讨论】:

    • 谢谢,是的,这是有道理的。 rdy 来自对稀疏矩阵的 todense 调用。我不知道它给出的类型与 ndarray 不同。
    • 使用asparse.Aasparse.toarray() 从稀疏生成一个数组。
    猜你喜欢
    • 2015-06-25
    • 1970-01-01
    • 2019-08-12
    • 2020-09-26
    • 1970-01-01
    • 2014-09-11
    • 2013-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多