复制数组会将数据从C_CONTIGUOUS更改为F_CONTIGUOUS

时间:2014-12-19 14:17:06

标签: python arrays numpy

请考虑以下示例:

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子程序时,这有点烦人。所以,我的问题如下:所有前面的例子之间的区别是什么?为什么每个案例的行为都如此不同?这是预期的,或者我错过了什么?

0 个答案:

没有答案