在矩阵中减去或添加向量

Cof*_*ife 6 arrays fortran

我试图减去矩阵的向量.换句话说,假设我有A元素矩阵

x1    x2    x3    x4
y1    y2    y3    y4
z1    z2    z3    z4
Run Code Online (Sandbox Code Playgroud)

我希望能够减去矢量

x1  
y1
z1
Run Code Online (Sandbox Code Playgroud)

x2
y2
z2
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做?我试过了

implict none
real, dimension(3,4) :: A
real,dimension(3) :: vector
vector(1)=A(1,1)-A(1,2)
vector(2)=A(2,1)-A(2,2)
vector(3)=A(3,1)-A(3,2)
Run Code Online (Sandbox Code Playgroud)

然而,这是相当粗糙的.此外,如果我需要计算几个总和或残差,这种方法是不切实际的,特别是当矩阵非常大时.我希望能够更优雅地做到这一点.

有没有办法在矩阵中指定向量?或者有一种迂回的方式来做到这一点?

Ale*_*ogt 4

[start]:[end][:stride]您可以通过(Fortran 2008 Standard,Cl. 6.5.3“数组元素和数组部分”:R621)指定数组切片。要选择沿指定维度的所有元素,请选择例如A(:,1)。您的差异如下:

implicit none
real, dimension(3,4) :: A
real,dimension(3) :: vector
vector(:)=A(:,1)-A(:,2)
Run Code Online (Sandbox Code Playgroud)

甚至

vector=A(:,1)-A(:,2)
Run Code Online (Sandbox Code Playgroud)