我的问题类似于Multiply a 3D matrix with a 2D matrix。但是,我在Fortran编码。
说,如果我有RxSxT
矩阵A
和SxU
矩阵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)?
答案 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