2016-03-26 19 views
5

Sto cercando di sottrarre i vettori di una matrice. In altre parole, supponiamo che io abbia matrice A con elementiSottrarre o aggiungere vettori in una matrice

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

io voglio essere in grado di sottrarre vettori

x1 
y1 
z1 

e

x2 
y2 
z2 

Come dovrei essere in grado di fare questo? Ho provato a fare

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) 

Tuttavia, questo è piuttosto grezzo. Inoltre, questo metodo sarebbe poco pratico se dovessi calcolare diverse somme o residui, specialmente quando la matrice è molto grande. Voglio essere in grado di farlo in modo più elegante. C'è un modo per specificare un vettore all'interno di una matrice? O c'è un modo per farlo?

risposta

3

È possibile specificare le porzioni di matrice per [start]:[end][:stride] (Fortran 2008 Standard, Cl. 6.5.3 "Elementi di matrice e sezioni di array": R621). Per selezionare tutti gli elementi lungo una dimensione specificata, ad esempio, A(:,1). Il tuo differenza legge quindi:

implicit none 
real, dimension(3,4) :: A 
real,dimension(3) :: vector 
vector(:)=A(:,1)-A(:,2) 

o anche

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