我在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_PRODUCT
或MATMUL
。我真的不清楚。
答案 0 :(得分:1)
为此,MATMUL是您想要的方式。见here。 DOT_PRODUCT仅适用于矢量。 MATMUL可以处理尺寸允许矩阵乘法的任何矩阵。
在您的示例中,您的矩阵没有匹配的尺寸。 Math(不仅仅是FORTRAN)希望m*k
矩阵乘以k*n
矩阵。你需要交换Mat1的轴。
编辑:或者,正如francescalus所说,你可以通过声明DIMENSION(4)
使其成为排名-1的载体。