我认为我理解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。
有人可以解释一下发生了什么事吗?
感谢。
答案 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