1
读一些用Cython代码,我跑进是否有一点需要指定而不是一维np.array是Fortran?
cdef double[:] centers = np.zeros(n_samples, order='F')
其中N_SAMPLES次是int,而不是一个迭代。是否有任何理由使用order='F'
,因为数组是1D?
读一些用Cython代码,我跑进是否有一点需要指定而不是一维np.array是Fortran?
cdef double[:] centers = np.zeros(n_samples, order='F')
其中N_SAMPLES次是int,而不是一个迭代。是否有任何理由使用order='F'
,因为数组是1D?
一个一维数组与NumPy的标志简短的测试:
In [1]: import numpy as np
In [2]: np.zeros(10).flags
Out[2]:
C_CONTIGUOUS : True
F_CONTIGUOUS : True
OWNDATA : True
WRITEABLE : True
ALIGNED : True
UPDATEIFCOPY : False
In [3]: np.zeros(10, order='F').flags
Out[3]:
C_CONTIGUOUS : True
F_CONTIGUOUS : True
OWNDATA : True
WRITEABLE : True
ALIGNED : True
UPDATEIFCOPY : False
所以,不,它没有任何区别。
不,这不应该有任何区别。 Fortan/C命令没有明确跟踪;治理属性是步伐;如果strides是长度为1的序列,则Fortran和C顺序是相同的,所以区别是无效的。
这可能原则上设置,因为该数组稍后传递给Fortran函数。或者稍后可能会发生一些阵列重塑,并从一开始就设置顺序以避免不必要的复制。或者它可能是复制和粘贴的完全多余的结果。很难说没有进一步的参考如何使用阵列。 – kazemakase
我认为它不会对重塑产生任何影响(因为无论如何都没有完成)。 – DavidW
@DavidW尽管重塑不起作用,但如果可能的话,结果仍指相同的数据。不过,我刚刚看到重塑并不能保证C或F布局。尽管如此,基本点仍然是 - 需要更多的上下文。 – kazemakase