繁体   English   中英

使用 f2py 将锯齿状的 arrays 传递给 Fortran

[英]Passing jagged arrays to Fortran using f2py

我目前在 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)

这样做的问题是它在内存方面的效率非常低,因为我存储了数组中从未使用过的巨大空部分。 In Python I can address this by making lists of lists of lists of lists of 2D numpy arrays of the correct size, but I'm not sure how to pass them to Fortran using f2py, or if that's even possible. 任何想法,将不胜感激。 谢谢!

绝对认为避免留下大量空白空间是正确的——这绝对不能很好地扩展。

传递一个完全平坦的数组以及每个矩阵的形状怎么样? 然后你可以在另一端重建它吗? 因为您有二维矩阵,所以每个矩阵的形状可以由两个整数定义。 然后,只要你有一个扁平化数组的标准化排序,你就可以很容易地在另一边重建它们。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM