乘两个矩阵的行,以获得一个标量按照Fortran [重复]

问题描述 投票:1回答:1

这个问题已经在这里有一个答案:

几年后,不使用Fortran语言的我有一些麻烦与matmul。假设我有两个矩阵:A_ {N,K}和{B_ J,K}。我想创建一个子程序,它采取的行和B的一行,乘那和创建标C.这是我写的:

subroutine test_matmul(A, B, N, K, J, row_a, row_b, C)
  integer, intent(in)                                   :: N, K, J, row_a, row_b
  double precision, dimension(N,K), intent(in)          :: A
  double precision, dimension(J,K), intent(in)          :: B
  double precision, intent(out)                         :: C

  C = matmul(A(row_a,:), B(row_b,:))

end subroutine test_matmul

唉,当我尝试编译此我得到以下错误:

  C = matmul(A(row_a,:), B(row_b,:))
                         1
Error: 'matrix_b' argument of 'matmul' intrinsic at (1) must be of rank 2

我究竟做错了什么?

fortran fortran90 fortran95
1个回答
3
投票

该错误是明显的matmul两个矩阵相乘,你试图传递两个向量。如果转换的向量矩阵,matmul将通过约矩阵另一个误差维度不匹配。

你应该尝试使用dot_product(vector_a, vector_b)代替matmul的。

© www.soinside.com 2019 - 2024. All rights reserved.