Fortran Error #6366:数组表达式形状不匹配问题求助
Fortran矩阵乘法维度不匹配问题解决
- 报错根源:
matmul(ddN, dN)的计算结果是8×8的二维矩阵,如果变量place1的声明维度(比如标量、一维数组、非8×8的二维数组)与该结果不匹配,就会触发Error #6366。 - 转置操作验证:确保
ddN是dN的正确转置。Fortran中需用transpose()函数实现转置,示例:ddN = transpose(dN),避免手动赋值导致维度错误。 - 正确数组声明示例:
real, dimension(1,8) :: dN ! 1行8列的二维数组 real, dimension(8,1) :: ddN ! 8行1列的转置数组 real, dimension(8,8) :: place1 ! 必须声明为8行8列的二维数组,匹配matmul结果维度 - 可运行测试代码:
program test_matmul implicit none real, dimension(1,8) :: dN real, dimension(8,1) :: ddN real, dimension(8,8) :: place1 ! 初始化1×8数组dN dN = reshape([1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0], [1,8]) ! 转置得到8×1数组ddN ddN = transpose(dN) ! 执行矩阵乘法 place1 = matmul(ddN, dN) ! 输出结果维度验证 print *, "place1的维度:", shape(place1) end program test_matmul - 常见错误排查:
- 错误将
place1声明为一维数组(如dimension(64))或标量,与matmul返回的二维矩阵维度不兼容 - 转置操作错误,比如
ddN被误声明为(1,8),此时matmul(ddN,dN)会返回1×1的矩阵,若place1是8×8则触发报错
- 错误将
内容的提问来源于stack exchange,提问作者Pime
相关产品推荐
相关产品推荐

