我以为我了解 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。
谁能解释一下这是怎么回事?
谢谢。
最佳答案
这是怎么回事?比你想象的要少。 ndarry.reshape
不是就地操作。因此:
b = np.arange(8,dtype='int8')
b.reshape(2,4,order='F')
print(b.shape)
将其作为输出:
(8,)
换句话说,b
仍然是一维的,因此可以有两个阶数。将 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
关于numpy - numpy 数组 C_CONTIGUOUS 和 F_CONTIGUOUS 怎么可能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49887023/