python - numpy 插入轴使数据不连续

标签 python numpy

为什么插入新轴会使数据不连续?

>>> a = np.arange(12).reshape(3,4,order='F')
>>> a
array([[ 0,  3,  6,  9],
       [ 1,  4,  7, 10],
       [ 2,  5,  8, 11]])
>>> a.reshape((3,1,4)).flags
  C_CONTIGUOUS : False
  F_CONTIGUOUS : False
  OWNDATA : False
  WRITEABLE : True
  ALIGNED : True
  UPDATEIFCOPY : False
>>> a[np.newaxis,...].flags
  C_CONTIGUOUS : False
  F_CONTIGUOUS : False
  OWNDATA : False
  WRITEABLE : True
  ALIGNED : True
  UPDATEIFCOPY : False
>>> a.flags
  C_CONTIGUOUS : False
  F_CONTIGUOUS : True
  OWNDATA : False
  WRITEABLE : True
  ALIGNED : True
  UPDATEIFCOPY : False

请注意,如果我使用 C 排序,它会在我 reshape 时保持连续的数据,但在我添加新轴时不会:

>>> a
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>> a.flags
  C_CONTIGUOUS : True
  F_CONTIGUOUS : False
  OWNDATA : False
  WRITEABLE : True
  ALIGNED : True
  UPDATEIFCOPY : False

>>> a.reshape(3,1,4).flags
  C_CONTIGUOUS : True
  F_CONTIGUOUS : False
  OWNDATA : False
  WRITEABLE : True
  ALIGNED : True
  UPDATEIFCOPY : False
>>> a[np.newaxis,...].flags
  C_CONTIGUOUS : False
  F_CONTIGUOUS : False
  OWNDATA : False
  WRITEABLE : True
  ALIGNED : True
  UPDATEIFCOPY : False

更新 对于那些可能会在搜索中找到它的人来说,为了保持当前数组顺序在 reshape 中,a.reshape(3,1,4,order='A') 工作并保持连续数组连续。


对于那些问“你为什么关心?”的人,这是一个脚本的一部分,该脚本以 fortran 顺序将数组传递给一些通过 f2py 编译的 fortran 子例程。 Fortran 例程需要 3D 数据,因此我用新的维度填充数组以使它们达到所需的维度数。我想保留连续的数据以避免复制输入/复制输出行为。

最佳答案

这不能回答您的问题,但可能会有一些用处: 您还可以使用 numpy.require np.require(a[np.newaxis,...], requirements='FA').flags
C_CONTIGUOUS:假
F_CONTIGUOUS:真
OWNDATA:真
可写:真
对齐:真
UPDATEIFCOPY:假

关于python - numpy 插入轴使数据不连续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16676661/

相关文章:

python - pandas to_csv 参数 float_format 为百分比

python - 获取与关键字匹配的每个数据框单元格的内容

python - CPI 的递归函数

python - 计算每组内的重复项数

python - 带有整数参数的 numpy.all 返回一个整数

python - 不止一个条件满足numpy select

python - Ubuntu 和 Python : Time based scripting of multiple texts to speech

python - Google Ads API - "failed with status "PERMISSION_DENIED”- "User doesn' 没有访问客户的权限。”

python - Numpy 的运行速度是 MATLAB 的一半

python - 如何高效地将数千张高清照片加载到 pandas df 中并转换为 HDF?