请考虑以下示例:
import numpy as np
pos = np.random.rand(3,1000)
k = np.random.randint(0,1000,1000) #this is just a random index to walk the array
print pos.flags
前面的例子给出了:
C_CONTIGUOUS : True
F_CONTIGUOUS : False
OWNDATA : True
WRITEABLE : True
ALIGNED : True
UPDATEIFCOPY : False
如果我使用先前定义的索引k复制数组,我得到以下内容:
pos_temp = pos[:,k]
print pos_temp.flags
给出:
C_CONTIGUOUS : False
F_CONTIGUOUS : True
OWNDATA : False
WRITEABLE : True
ALIGNED : True
UPDATEIFCOPY : False
但是,如果我按以下方式复制数组:
pos_temp = np.ndarray([3,1000])
pos_temp[:,:] = pos[:,k]
print pos_temp.flags
我明白了:
C_CONTIGUOUS : True
F_CONTIGUOUS : False
OWNDATA : True
WRITEABLE : True
ALIGNED : True
UPDATEIFCOPY : False
正如我所料。当我将数组传递给C子程序时,这有点烦人。所以,我的问题如下:所有前面的例子之间的区别是什么?为什么每个案例的行为都如此不同?这是预期的,或者我错过了什么?