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@A
与 np.matmul(B,A)
相同,假设 A
实际上是一个“一维列数组”,你会得到
>>> B@A
array([ 1.538189 , -0.56301625, 1.21313142])
我从 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@A
与 np.matmul(B,A)
相同,假设 A
实际上是一个“一维列数组”,你会得到
>>> B@A
array([ 1.538189 , -0.56301625, 1.21313142])