将两个矩阵的行相乘,得到带有 Fortran 的标量



在不使用Fortran几年后,我在matmul上遇到了一些麻烦。假设我有两个矩阵:A_{N,K} 和 B_{J,K} 。我想创建一个子例程,它取一行 A 和一行 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

我做错了什么?

错误很明显matmul两个矩阵相乘,并且您正在尝试传递两个向量。如果将向量转换为矩阵,matmul将通过另一个关于矩阵维度不匹配的错误。

您应该尝试使用 dot_product(vector_a, vector_b) 而不是 matmul

最新更新