numpy.array()中的order参数是什么做AKA什么是连续顺序?

Hor*_*ith 6 c python arrays numpy

numpy.array()中的order参数有什么作用?

它在文档中说我链接到它将指定数组的连续顺序,但我不知道这是什么意思.那么连续的顺序是什么?

订单参数文档的副本:

order:{'C','F','A'},可选指定数组的顺序.如果order是'C'(默认值),则数组将以C连续顺序排列(last-index变化最快).如果order为'F',则返回的数组将采用Fortran连续顺序(first-index变化最快).如果order是'A',则返回的数组可以是任何顺序(C-,Fortran-连续,甚至是不连续的).

小智 7

让我们先拆开包装K A CF首先代表什么。我指的是实施细节部分

  • C是连续布局。从数学上讲,行专业。
  • F是 Fortran 连续布局。从数学上讲,专栏专业。
  • A是什么顺序。一般不要用这个。
  • K是保持秩序。一般不要用这个。

从这里我可以向您推荐解决以下两个问题的其他答案:数据连续性和行与列主要排序。行与列主要排序在其Wikipedia 文章中得到了最好的描述。所以现在让我们谈谈数据连续性。在 python 中,这通常不是那么重要,所以我将在这里暂时跳到 C。

在 C 中有两种用于存储二维数组的选项。

  1. 数组数组
  2. 扁平化数组

在第一个示例中,我们存储在数组中的数据类型是另一个数组。就指针而言,我们有一块内存,其中的每个值都是指向另一个内存块的指针。为了在任何点找到一个值,我们必须先取消引用外部数组,然后再引用内部数组。

在第二个示例中,我们有一个大小为 的内存块rows * columns。我们可以取消引用任何索引以获取其值。但是索引是一维的。可以使用 转换 2D 索引y + x * width

在进行数值计算时,我们努力使用连续数组。这是因为numpy依赖的缓存加速。如果我想将值添加a到 2D 数组中的每个值,如果合适,我可以将整个展平的数组移动到缓存中。但是,您只能将单个列(或行)移动到数组数组的缓存中。如果你想了解更多,请查看SIMD [相同指令多数据]。

  • 您正在混淆 C 数组数组的工作方式和 Java 数组数组的工作方式。您的“数组数组”图像来自 Java 课程。 (4认同)
  • 这不是 C 数组数组的工作方式。这就是指向指向更多数组的指针的 C 数组的 C 指针的工作方式。AC 数组数组是连续的,并且与 C 连续 NumPy 多维数组的布局相同。(这就是为什么它被称为 C-contiguous。) (2认同)