我认为我理解了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。
有人能给我解释一下到底是怎么回事吗?
谢谢。
发布于 2018-04-18 09:21:01
到底怎么回事?比你想象的要少。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 : Falsehttps://stackoverflow.com/questions/49887023
复制相似问题