numpy的flatten0是做什么的?

问题描述

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在使用时 numpy的flatten(0)会做什么?

解决方法

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

如果是这样,则是,则默认情况下,在不带任何参数的情况下调用flatten()时,默认情况下等效地调用flatten('C')。您可以在此处看到它的记录

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

默认为row-major(C样式)的实现返回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