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

Matrix 使用matmul将数组的一部分乘为矩阵,matrix,fortran,matrix-multiplication,Matrix,Fortran,Matrix Multiplication,我的问题与此类似。然而,我正在用Fortran编写代码 比方说,如果我有一个RxSxT矩阵a和一个SxU矩阵B,其中R,S,T,U是整数,我想将a(:,:,0)与B相乘。如何使用matmul?当我做这样的事情时 C(:,:,0) = matmul(A(:,:,0),B) 编译器(gfortran)提供: 这种转置可能是问题的一部分。它是否将A(i,j,k)转换为A(k,i,j)?转置(A(:,:,0))应将索引A(i,j,0)交换为A(j,i,0)。A(:,:,0)是秩2矩阵 无论输入

我的问题与此类似。然而,我正在用Fortran编写代码

比方说,如果我有一个
RxSxT
矩阵
a
和一个
SxU
矩阵
B
,其中
R,S,T,U
是整数,我想将
a(:,:,0)
B
相乘。如何使用
matmul
?当我做这样的事情时

    C(:,:,0) = matmul(A(:,:,0),B)
编译器(gfortran)提供:

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

转置(A(:,:,0))应将索引A(i,j,0)交换为A(j,i,0)。A(:,:,0)是秩2矩阵

无论输入源代码是否正确,编译器都不应该崩溃。您使用的是最新版本的gfortran吗?您可以向gfortran开发团队报告此“内部编译器错误:分段错误”:转置(A(:,:,0))应将索引A(i,j,0)交换到A(j,i,0)。A(:,:,0)是秩2矩阵


无论输入源代码是否正确,编译器都不应该崩溃。您使用的是最新版本的gfortran吗?您可以将此“内部编译器错误:分段错误”报告给gfortran开发团队:

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


当然,内部编译器错误总是编译器错误;除非您有一些古老版本的gfortran,否则请在

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


当然,内部编译器错误总是编译器错误;除非你有一些gfortran的古老版本,否则请在

上提交一个bug,所以如果我有一个(:,:,1),应该可以吗?看起来问题解决了,但我还是有seg故障。我的版本是4.6,我认为这是最新的稳定(非开发)版本。所以,如果我有一个(:,:,1),它应该可以吗?看起来问题解决了,但我还是有seg故障。我的版本是4.6,我认为这是最新的稳定(非开发)版本。这很有趣。那么转置(A(i,j,k))给出A(j,i,k)?如果我想从A(I,j,k)到A(k,j,I)呢?还是给A(i,k,j)?我应该使用什么命令?这很有趣。那么转置(A(i,j,k))给出A(j,i,k)?如果我想从A(I,j,k)到A(k,j,I)呢?还是给A(i,k,j)?我应该使用什么命令?
    Warning:Array reference at (1) is out of bounds (0 < 1) in dimension 3 
    f951: internal compiler error: Segmentation fault
 C(:,:,0) = matmul(B,transpose(A(:,:,0))