使用matmul将数组的一部分乘以矩阵

时间:2011-12-01 10:38:45

标签: matrix fortran matrix-multiplication

我的问题类似于Multiply a 3D matrix with a 2D matrix。但是,我在Fortran编码。

说,如果我有RxSxT矩阵ASxU矩阵B,其中R,S,T,U是整数,我想要乘以{{ 1}}与A(:,:,0)。如何使用B执行此操作?当我做

之类的事情
matmul

编译器(gfortran)给出:

    C(:,:,0) = matmul(A(:,:,0),B)

有解决方法吗? 感谢。

编辑:我应该补充一点,我实际上是在转置第二个矩阵。比方说, Warning:Array reference at (1) is out of bounds (0 < 1) in dimension 3 f951: internal compiler error: Segmentation fault 一个A矩阵和RxSxT一个B矩阵。然后

UxS

这个转置可能是问题的一部分。它是否将A(i,j,k)转换为A(k,i,j)?

2 个答案:

答案 0 :(得分:8)

请记住,在Fortran中,您的数组索引默认从1开始。因此,除非您指定数组A在第3维上具有非默认下限,否则gfortran指出您的错误是完全正确的。

当然,内部编译器错误始终是编译器错误;除非你有一些古老版本的gfortran,请在http://gcc.gnu.org/bugzilla

提交一个错误

答案 1 :(得分:2)

转置(A(:,,0))应将索引A(i,j,0)与A(j,i,0)互换。 A(:,:,0)是二级矩阵。

无论输入源代码是否正确,编译器都不应该崩溃。您使用的是最新版本的gfortran吗?您可以向gfortran开发团队报告此“内部编译器错误:分段错误”:http://gcc.gnu.org/wiki/GFortran#bugs