Fortran 中的 Matmul

Matmul in Fortran

我从 Fortran 和 Python 中的 matmul 获得了不同的结果。如何在 Fortran 中获得正确的一个。 B 可能不理解为 3x3 矩阵。请问如何解决?

k = 1 米 = 3

在 Fortran 中,我有:

 A(k:m,k):  0.88807383397711526       0.32505758367186816       0.32505758367186816     
 B(k:m,k:m):   1.0000000000000000        1.0000000000000000        1.0000000000000000       -1.0000000000000000        0.0000000000000000        1.0000000000000000        1.0000000000000000        0.0000000000000000        1.0000000000000000 

matmul 给出

1.5381890013208515      -0.56301625030524716        1.2131314176489834

在Python中,我有:

A[k,k:m] [ 0.888074  0.325058  0.325058]
B[k:m,k:m] [[ 1.000000  1.000000  1.000000]
 [-1.000000  0.000000  1.000000]
 [ 1.000000  0.000000  1.000000]]

matmul 给出

 [ 0.888074  0.888074  1.538189]

这取决于乘法的顺序。 Numpy 考虑一维数组而不将其视为行或列向量。

import numpy as np
A = np.array([0.88807383397711526, 0.32505758367186816, 0.32505758367186816])
B = np.array([[1, 1, 1], [-1, 0, 1], [1, 0, 1]], dtype=float)

如果你做 A@B,这与 np.matmul(A,B) 相同,假设 A 实际上是一个“一维行数组”,你会得到

>>> A@B
array([0.88807383, 0.88807383, 1.538189  ])

但是如果你做相反的事情,即 B@Anp.matmul(B,A) 相同,假设 A 实际上是一个“一维列数组”,你会得到

>>> B@A
array([ 1.538189  , -0.56301625,  1.21313142])