【问题标题】:What did numpy's flatten(0) do?numpy 的 flatten(0) 做了什么?
【发布时间】:2021-01-09 14:39:18
【问题描述】:

Python 3.8、Numpy 1.18.1

代码有行,

L = H.flatten(0)

这显然会引发以下错误,

ValueError:为数组排序检测到非字符串对象。请 改为传入“C”、“F”、“A”或“K”

现在我已将行更改为,

L = H.flatten('C')

并且代码运行良好,不幸的是,如果我将其更改为,它也运行良好(但结果不同),

L = H.flatten('F')

我的工作假设是最初的意图是行主要(C 风格),因为在 HPC 之外没有多少人使用 Fortran。

我想确定一下,到目前为止,我的搜索还没有出现任何结果。

那么, numpy 的 flatten(0) 在使用时做了什么?

【问题讨论】:

  • 在不知道该代码的来源的情况下,我认为我们无法为您提供帮助。可能是错字。或者可能有一段时间flatten 忽略了这样的参数,或者将0 解释为默认值。它是编译后的代码,因此参数的处理不会/并不总是像纯 Python 函数那样表现。因此,如果有变化,很可能是 API 清理,而不是功能变化。

标签: python numpy flatten legacy


【解决方案1】:

我假设您在谈论调用 flatten() 时的默认顺序选项是什么?

如果是这样,是的,那么默认情况下,当不带任何参数调用 flatten() 时,默认情况下调用 flatten('C')。你可以在这里看到它的文档

https://numpy.org/devdocs/reference/generated/numpy.ndarray.flatten.html

row-major(C-style) 是默认的实现回到了 numpy1.8

https://docs.scipy.org/doc/numpy-1.8.0/reference/generated/numpy.chararray.flatten.html#numpy.chararray.flatten

在此之前的任何版本,您必须手动指定是否在参数输入中展平行或列。

我认为为什么 flatten('C') 是默认设置没有任何详细的原因。这只是为了简化。

如果是关于为什么 flatten(0) 不起作用,那仅仅是因为 flatten 不接受除了文档中指定的“C”、“F”、“A”、“K”选项之外的任何其他输入

编辑 对不起,我误解了这个问题 numpy.ndarray.flatten() 只是 C PyArray_Flatten 的别名,可以在这里找到

https://github.com/numpy/numpy/blob/v1.18.1/numpy/core/src/multiarray/shape.c

【讨论】:

  • 嗨 Chass 我知道默认设置并且还知道 flatten(0) 不起作用(请参阅 OP)我要问的是什么 DID flatten(0)使用时做。
  • 哦,如果是这样,那么对不起,我误解了这个问题。 numpy.ndarray.flatten() 只是 C PyArray_Flatten 的别名,可以在这里找到github.com/numpy/numpy/blob/v1.18.1/numpy/core/src/multiarray/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-10
  • 2019-06-29
  • 2011-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-04
相关资源
最近更新 更多