如何强制numpy数组使用Fortran风格?

18 投票
2 回答
6954 浏览
提问于 2025-04-17 03:52

我正在使用很多Fortran库来进行一些数学计算。因此,numpy中的所有数组都需要是Fortran连续存储的。
目前我使用的是numpy.asfortranarray()来实现这一点。

我有几个问题:

  1. 使用这种方法告诉numpy数组应该以Fortran风格存储,是不是比较快,或者有没有更快的方法?
  2. 有没有可能设置某个numpy的标志,这样每次创建的数组都是Fortran风格的?

2 个回答

7

关于问题2:你可能会担心在进行数组变换和操作后,是否能保持Fortran的顺序。我之前也遇到过类似的问题,涉及到字节序。我从文件中加载了一个大端格式的原始数组,但当我进行了对数变换后,得到的数组却变成了小端格式。为了解决这个问题,我首先分配了一个第二个大端数组,然后在这个数组上直接进行对数变换:

b=np.zeros(a.shape,dtype=a.dtype)
np.log10(1+100*a,b)

在你的情况下,你需要用Fortran的顺序来分配b

14

在生成numpy.array对象时,可以使用一个可选的参数order='F'(默认是'C')。我就是这么做的,可能和你做的效果一样。至于第二个问题,我不知道怎么设置默认的顺序,但在生成数组时,直接加上order这个可选参数就很简单了。

撰写回答