Fortran:从矩阵中提取列和行,并将它们用作一维数组进行乘法运算

时间:2014-05-21 11:35:02

标签: arrays matrix fortran fortran90

假设我的矩阵AB都具有n x n的大小。现在我想将A的每一列视为列矩阵ColA(i) [i = 1,n],并将B矩阵的每一行视为行矩阵RowB(j) [j = 1,n]。

现在我可以使用matmul函数来构造一个名为C的新矩阵,通过将ColA和RowB乘以所有可能的i和j值来找到它们的元素吗?像

这样的东西
do i = 1, n
 do j= 1, n
    C(i,j) = matmul( ColA(i), RowB(j) ) 
 end do
end do

2 个答案:

答案 0 :(得分:2)

好吧,我可以看到你问题的三个可能的答案,但我不确定你的意思是哪一个......

  • i的{​​{1}}列和A的行j的点积,它等于矩阵乘法B:< / LI>
B*A
  • 外部产品:C = matmul( B,A ) ,但随后每个组合C=colA * rowB^T都会生成一个单独的矩阵i,j
C
  • 元素乘法,表示C = matmul( A(:,i), B(j,:) ) 。这在Fortran中非常简单:
C_ij = A_ij * B_ij

接受你的选择!

答案 1 :(得分:1)

您的代码没有意义。 ColA(i)不是向量,它是标量,你不能将标量传递给矩阵乘法。同样,C(i,j)不是矩阵,它是标量。 C是一个矩阵。

或者如果你的意思是ColA是向量的向量,那么这在Fortran中是不可能的。那么C必须是矩阵矩阵,也是不可能的。对于派生类型,它可能是可能的,但您必须自己编写代码。