我试图将列向量(n,1)的一部分乘以另一行向量(1,n)的一部分。两个部分的长度相同。所以我应该得到一个矩阵(n,n)。
这是我的简单代码:
PROGRAM test_pack_1
REAL :: m(1,10), x(10,1), y(10,10)
m = reshape( (/ 1, -1, 3, 2, 1, 2, -2, -2, 1, 0 /), (/ 1, 10 /))
x = reshape( (/ 1, 0, 1, 1, 0, 1, 1, 0, 1, 0 /), (/ 10, 1 /))
y(1:9,1:9) = MATMUL(x(1:9,1),m(1,1:9))
DO j = 1,10
PRINT* ;WRITE(*,*) y(:,j)
ENDDO
print *
END PROGRAM
我使用:
ifort -g -debug -traceback -check all -ftrapuv test_cshift.f90
我得到了:
test_cshift.f90(7): error #6241: The shapes of the arguments are inconsistent or nonconformable. [MATMUL]
y(1:9,1:9) = MATMUL(x(1:9,1),m(1,1:9))
-------------^
test_cshift.f90(7): error #6366: The shapes of the array expressions do not conform. [Y]
y(1:9,1:9) = MATMUL(x(1:9,1),m(1,1:9))
答案 0 :(得分:8)
问题在于x(1:9,1)
的形状[9 1]
不是[9]
而是x(1:9, 1:1)
。您需要使用m
。 {{1}}也是如此。