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

时间:2014-12-03 07:52:06

标签: python c arrays numpy

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

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

订单参数文档的副本:

  

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

1 个答案:

答案 0 :(得分:0)

让我们首先打开K A CF代表的包装。我指的是this的实现细节部分。

  • C是连续的布局。从数学上讲,行专业。
  • F是Fortran连续布局。从数学上讲,专科。
  • A是任何顺序。通常不要使用它。
  • K是保持秩序。通常不要使用它。

在这里,我可以向您介绍其他解决以下两个问题的答案:数据连续性和行与列的主要顺序。行与列的主要排序最好用其Wikipedia article来描述。因此,现在让我们谈谈数据连续性。在python中,这通常并不重要,因此我将在这里跳到C。

在C语言中,有两个用于存储2D数组的选项。

  1. An array of arrays
  2. A flattened array

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

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

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