以Fortran顺序在Python Numpy中创建列向量

以Fortran顺序在Python Numpy中创建列向量,python,arrays,numpy,fortran,Python,Arrays,Numpy,Fortran,我需要一个3行1列的numpy数组(用于创建区域时的pycgn) 当询问它是否为NPY.isfortran(X)时,这必须是正确的 我试过几种方法,但都不管用 e、 g 功能是。它返回: 如果数组是Fortran连续的但不是C连续的,则为True 您的数组是fortran连续的,C连续的。函数是。它返回: 如果数组是Fortran连续的但不是C连续的,则为True 您的数组是fortran连续和C连续的。引用(我的重点): 如果数组是Fortran连续的,但不是C连续的,则返回True 此函数已

我需要一个3行1列的numpy数组(用于创建区域时的pycgn)

当询问它是否为NPY.isfortran(X)时,这必须是正确的

我试过几种方法,但都不管用

e、 g

功能是。它返回:

如果数组是Fortran连续的但不是C连续的,则为True

您的数组是fortran连续的,C连续的。

函数是。它返回:

如果数组是Fortran连续的但不是C连续的,则为True

您的数组是fortran连续和C连续的。

引用(我的重点):

如果数组是Fortran连续的,但不是C连续的,则返回True

此函数已过时,并且由于松弛步幅检查导致的更改,对于NumPy>=1.10.0版本和早期版本,同一数组的返回值可能不同。如果只想检查数组是否为Fortran连续数组,请改用
a.flags.f_continuous

这里有几点需要注意:

  • 您的向量是Fortran和C连续的,因此函数返回false
  • 该功能已过时
  • 有一种检查阵列的替代方法,应该适合您的情况:

    a = np.zeros((3, 1), order='F')
    print(a.flags)
    # C_CONTIGUOUS : True
    # F_CONTIGUOUS : True
    # OWNDATA : True
    # WRITEABLE : True
    # ALIGNED : True
    # UPDATEIFCOPY : False
    
    print(a.flags.f_contiguous)
    # True
    
    不能编辑标志。然而,这里有一些技巧。例如,可以使用转置将2D C数组转换为F数组(尽管具有交换的维度):

    引用(我的重点):

    如果数组是Fortran连续的,但不是C连续的,则返回True

    此函数已过时,并且由于松弛步幅检查导致的更改,对于NumPy>=1.10.0版本和早期版本,同一数组的返回值可能不同。如果只想检查数组是否为Fortran连续数组,请改用
    a.flags.f_continuous

    这里有几点需要注意:

  • 您的向量是Fortran和C连续的,因此函数返回false
  • 该功能已过时
  • 有一种检查阵列的替代方法,应该适合您的情况:

    a = np.zeros((3, 1), order='F')
    print(a.flags)
    # C_CONTIGUOUS : True
    # F_CONTIGUOUS : True
    # OWNDATA : True
    # WRITEABLE : True
    # ALIGNED : True
    # UPDATEIFCOPY : False
    
    print(a.flags.f_contiguous)
    # True
    
    不能编辑标志。然而,这里有一些技巧。例如,可以使用转置将2D C数组转换为F数组(尽管具有交换的维度):


    PYCGN无法创建列向量

    我通过在C中编程CGNS头(基本和区域)解决了这个问题


    然后将C程序中创建的文件加载到pyCGNS中并在其上构建。

    pyCGNS无法创建列向量

    我通过在C中编程CGNS头(基本和区域)解决了这个问题


    然后在pyCGNS中加载从C程序创建的文件并在其上构建。

    如果其中一个维度为1,则C顺序和Fortran顺序之间绝对没有区别。元素按一维数组的顺序排列。如果其中一个维度为1,则C顺序和Fortran顺序之间绝对没有区别。元素按1D数组的顺序排列。是否有方法修改Numpy数组标志。否,它们是只读的。这是有意义的,因为它们是描述性的,而不是规定性的。如果需要不同的标志,则需要创建一个新数组(或至少一个新视图)。是否有方法修改Numpy数组标志。否,它们是只读的。这是有意义的,因为它们是描述性的,而不是规定性的。如果需要不同的标志,则需要创建一个新数组(或至少创建一个新视图)。
    a = np.zeros((3, 1), order='F')
    print(a.flags)
    # C_CONTIGUOUS : True
    # F_CONTIGUOUS : True
    # OWNDATA : True
    # WRITEABLE : True
    # ALIGNED : True
    # UPDATEIFCOPY : False
    
    print(a.flags.f_contiguous)
    # True
    
    print(np.ones((3, 2), order='C').flags)
    #  C_CONTIGUOUS : True
    #  F_CONTIGUOUS : False
    # ....
    
    print(np.ones((3, 2), order='C').T.flags)
    #  C_CONTIGUOUS : False
    #  F_CONTIGUOUS : True
    # ....