相当于Fortran中的numpy.dot(python)

时间:2017-05-04 19:21:40

标签: python numpy matrix fortran

我在python中有代码需要“翻译”到Fortran(我不知道那么多......)

我有:

>>>Mat1
array([[ 0.2],
       [ 0.4],
       [-0.2],
       [-0.8]])
>>> X
array([[0, 0, 1, 1],
       [0, 1, 1, 0],
       [1, 0, 1, 0],
       [1, 1, 1, 1]])

然后我这样做:

Result=np.dot(X,Mat1)

我想在Fortran中做相同的事情

REAL(8), DIMENSION(4,1)::Mat1
REAL(8), DIMENSION(4,4)::X

X(:, 1)=(/0, 0, 1, 1/)
X(:, 2)=(/0, 1, 1, 0/)
X(:, 3)=(/1, 0, 1, 0/)
X(:, 4)=(/1, 1, 1, 1/)

Mat1(:,1)=(/0.2,0.4,-0.2,-0.8/) 

但是在这种情况下,numpy.dot并不是真正做点积...我不知道是否应该使用DOT_PRODUCTMATMUL。我真的不清楚。

1 个答案:

答案 0 :(得分:1)

为此,MATMUL是您想要的方式。见here。 DOT_PRODUCT仅适用于矢量。 MATMUL可以处理尺寸允许矩阵乘法的任何矩阵。

在您的示例中,您的矩阵没有匹配的尺寸。 Math(不仅仅是FORTRAN)希望m*k矩阵乘以k*n矩阵。你需要交换Mat1的轴。

编辑:或者,正如francescalus所说,你可以通过声明DIMENSION(4)使其成为排名-1的载体。