numpy - numpy 数组 C_CONTIGUOUS 和 F_CONTIGUOUS 怎么可能

标签 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。

谁能解释一下这是怎么回事?

谢谢。

最佳答案

这是怎么回事?比你想象的要少。 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/

相关文章:

arrays - 为什么空数组的类型在结构内部和外部具有不同的大小?

assembly - 在程序集 x86 中对齐

python - Pandas 经纬度到连续行之间的距离

python - 如果值在Python中的字典中匹配,则快速子集数组

types - 向 MPI 结构添加填充

c - IAR Pragma data_alignment 不工作

c++ - MOVAPS 访问未对齐的地址

python-3.x - 计算 numpy.chararray 中字符出现次数的最快方法

python - 具有重复索引的 numpy 数组的向量化分配 (d[i,j,i,j] = s[i,j])

python - 在不获取 GIL 的情况下在 Cython 中分配中间多维数组