怎么可能是numpy数组C_CONTIGUOUS以及F_CONTIGUOUS

时间:2018-04-17 20:32:40

标签: numpy memory-alignment

我认为我理解numpy数组的行主要(C_CONTIGUOUS)和列主要(F_CONTIGUOUS)内存对齐的概念。我认为这两面旗帜是相互排斥的。但后来我看到一个数组,这两个标志都设置为True。

特别是我尝试了以下命令:

b = np.arange(8,dtype='int8')
b.reshape(2,4,order='F')
b.flags
C_CONTIGUOUS : True
F_CONTIGUOUS : True
OWNDATA : True
WRITEABLE : True
ALIGNED : True
UPDATEIFCOPY : False

我希望在命令b.reshape(2,4,order ='F')之后,数组将F_CONTIGUOUS设置为True并且C_CONTIGUOUS设置为False。

有人可以解释一下发生了什么事吗?

感谢。

1 个答案:

答案 0 :(得分:0)

发生了什么?比你想象的少。 ndarry.reshape不是就地操作。因此:

b = np.arange(8,dtype='int8')
b.reshape(2,4,order='F')
print(b.shape)

将此作为输出:

(8,)

换句话说,b仍然是1D,因此可以同时拥有两个订单。将reshape的结果保存到新数组会得到您期望的结果:

b = np.arange(8,dtype='int8')
c= b.reshape(2,4,order='F')
print(c.flags)

输出:

C_CONTIGUOUS : False
F_CONTIGUOUS : True
OWNDATA : False
WRITEABLE : True
ALIGNED : True
UPDATEIFCOPY : False