numpy.array()中的订单参数有什么作用?
它在文档中说我链接到它将指定数组的连续顺序,但我不知道这应该是什么意思。那么连续的顺序是什么?
订单参数文档的副本:
顺序:{'C','F','A'},可选 指定数组的顺序。如果order是'C'(默认值),则数组将以C连续顺序排列(last-index变化最快)。如果order为'F',则返回的数组将采用Fortran连续顺序(first-index变化最快)。如果order是'A',那么返回的数组可以是任何顺序(C-,Fortran-contiguous,甚至是不连续的)。
答案 0 :(得分:0)
让我们首先打开K
A
C
和F
代表的包装。我指的是this的实现细节部分。
C
是连续的布局。从数学上讲,行专业。F
是Fortran连续布局。从数学上讲,专科。A
是任何顺序。通常不要使用它。K
是保持秩序。通常不要使用它。在这里,我可以向您介绍其他解决以下两个问题的答案:数据连续性和行与列的主要顺序。行与列的主要排序最好用其Wikipedia article来描述。因此,现在让我们谈谈数据连续性。在python中,这通常并不重要,因此我将在这里跳到C。
在C语言中,有两个用于存储2D数组的选项。
在第一个示例中,我们存储在数组中的数据类型是另一个数组。在指针方面,我们有一个内存块,其中的每个值都是指向另一个内存块的指针。为了在任何点找到一个值,我们必须先取消引用外部数组,然后再取消引用内部数组。
在第二个示例中,我们只有一个内存块,大小为rows * columns
。我们可以取消引用任何索引以获得其值。但是指标是一维的。可以使用y + x * width
转换2D索引。
在进行数学运算时,我们努力使用连续数组。这样做的原因是numpy所依赖的缓存加速。如果我想将值a
添加到2D数组中的每个值,我可以将整个展平的数组(如果合适)移动到缓存中。但是,您只能将单个列(或行)移动到阵列数组的高速缓存中。如果您想了解更多信息,请查找SIMD [相同指令的多个数据]。