使用f2py将交错数组传递给Fortran

2024-09-30 18:33:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前在Python中有一个6D numpy数组,其中前4个索引指定需要哪个2D矩阵。我可以使用f2py将其传递到Fortran90,然后使用以下方法访问2D矩阵:

subroutine mySubroutine(myArray)

real(8), dimension(:,:,:,:,:,:) :: myArray

matrix = myArray(a,b,c,d,:,:)

然而,矩阵通常可以是不同的大小。我发现的唯一方法是使最后两个维度等于最大可能的大小,在左上角存储较小的矩阵,并使用以下方法获得较小的矩阵:

matrix = myArray(a,b,c,d,1:matrixSize,1:matrixSize)

问题是它的内存效率非常低,因为我存储的是阵列中从未使用过的大量空部分。在Python中,我可以通过制作大小正确的2D numpy数组列表来解决这个问题,但我不确定如何使用f2py将它们传递给Fortran,或者这是否可行。任何想法都将不胜感激。谢谢


Tags: 方法内存numpy矩阵数组realmatrix效率
1条回答
网友
1楼 · 发布于 2024-09-30 18:33:10

当然,你认为避免留下大量空白空间是正确的——这肯定不会很好地扩展

传递一个完全平坦的数组,以及每个矩阵的形状如何?然后你可以在另一端重建它?因为有2D矩阵,所以每个矩阵的形状可以由两个整数定义。然后,只要对展平阵列进行标准化排序,就可以轻松地在另一侧重建它们

例如,如果您有两个矩阵,一个大小为10x10,一个大小为100x100,您可以传入:

FlatArr(10100) = [your_data]
SizeArr(4) = [10, 10, 100, 100]

相关问题 更多 >