在矩阵中减去或添加向量

时间:2016-03-26 05:47:10

标签: arrays fortran

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

x1    x2    x3    x4
y1    y2    y3    y4
z1    z2    z3    z4

我希望能够减去矢量

x1  
y1
z1

x2
y2
z2

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

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)

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

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

1 个答案:

答案 0 :(得分: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)

甚至

vector=A(:,1)-A(:,2)