为什么插入新的轴会使数据不连续?在
>>> 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
排序,则在我重塑形状时,它确实会维护连续的数据,但在添加新轴时则不会:
更新对于那些可能在搜索中找到它的人来说,为了保持当前数组的顺序重塑,a.reshape(3,1,4,order='A')
工作并保持一个连续的数组连续。在
对于那些问“你为什么在乎?”,这是一个脚本的一部分,该脚本以fortran顺序将数组传递给通过f2py
编译的一些fortran子例程。fortran例程需要三维数据,所以我用新的维度填充数组,使它们达到所需的维数。我希望保持连续的数据,以避免copy-in/copy-out行为。在
这不能回答您的问题,但可能有一些用处: 你也可以利用numpy.require
np.require(a[np.newaxis,...], requirements='FA').flags
C_CONTIGUOUS : False
F_CONTIGUOUS : True
OWNDATA : True
^{
ALIGNED : True
UPDATEIFCOPY : False
相关问题 更多 >
编程相关推荐