2017-02-14 17 views
1

读一些用Cython代码,我跑进是否有一点需要指定而不是一维np.array是Fortran?

cdef double[:] centers = np.zeros(n_samples, order='F') 

其中N_SAMPLES次是int,而不是一个迭代。是否有任何理由使用order='F',因为数组是1D?

+0

这可能原则上设置,因为该数组稍后传递给Fortran函数。或者稍后可能会发生一些阵列重塑,并从一开始就设置顺序以避免不必要的复制。或者它可能是复制和粘贴的完全多余的结果。很难说没有进一步的参考如何使用阵列。 – kazemakase

+0

我认为它不会对重塑产生任何影响(因为无论如何都没有完成)。 – DavidW

+0

@DavidW尽管重塑不起作用,但如果可能的话,结果仍指相同的数据。不过,我刚刚看到重塑并不能保证C或F布局。尽管如此,基本点仍然是 - 需要更多的上下文。 – kazemakase

回答

2

一个一维数组与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 

所以,不,它没有任何区别。

1

不,这不应该有任何区别。 Fortan/C命令没有明确跟踪;治理属性是步伐;如果strides是长度为1的序列,则Fortran和C顺序是相同的,所以区别是无效的。

相关问题