2016-03-31 8 views
0

Ich versuche, alle ABER bestimmten Indexpaare in einem mehrdimensionalen Array auszuwählen. h. ich habe einen Satz von gepaarten Indizes (z.B. [1,2] und [4,5]). Ich möchte alle, aber diese indexiert Paare auf 0Alle ABER bestimmten Indexpaare im mehrdimensionalen Array auswählen Matlab

einstellen Der nächstgelegene ich dazu gekommen ist:

A(setdiff(1:length(A(:,1)),lon),setdiff(1:length(A(1,:)),lat)) = 0; 

, wobei A die Matrix und lon und lat sind die Indexpaare Ich möchte halten . Dies lässt jedoch auch alle sich überschneidenden Zeilen und Spalten dieser Paare übrig.

Irgendwelche Ideen? Hier

ist einige Beispiel-Code:

A = ones([5,5]) 
A = 

    1  1  1  1  1 
    1  1  1  1  1 
    1  1  1  1  1 
    1  1  1  1  1 
    1  1  1  1  1 

lon = [1]; 

lat = [4]; 

A(setdiff(1:length(A(:,1)),lon),setdiff(1:length(A(1,:)),lat)) = 0 

A = 

    1  1  1  1  1 
    0  0  0  1  0 
    0  0  0  1  0 
    0  0  0  1  0 
    0  0  0  1  0 

Was ich will, ist:

A =

 0  0  0  1  0 
    0  0  0  0  0 
    0  0  0  0  0 
    0  0  0  0  0 
    0  0  0  0  0 
+1

Können Sie ein kurzes Stück von Beispieldaten zur Verfügung stellen? – Suever

+0

Ist das letzte Stück was du willst * oder was du gerade bekommst? – Suever

+0

Sorry, nein Ich will nur das eine Indexpaar, nicht die ganzen sich überschneidenden Zeilen und Spalten. Auch wenn Sie meine Frage bereits beantwortet haben, werde ich sie aktualisieren, um klarer zu sein. –

Antwort

0

Die einfachste Sache zu tun ist eigentlich das Gegenteil von dem, was Sie versucht haben. Zuerst möchten Sie mit einer Matrix von Nullen beginnen und dann nur die Paare eingeben, die Sie in lat und lon gespeichert haben. Auch, weil Sie Indizes gekoppelt haben, möchten Sie diese zu einem linearen Index konvertieren mit sub2ind

%// Convert subscripts to a linear index 
inds = sub2ind(size(A), lon, lat); 

%// Start off with a matrix of zeros 
B = zeros(size(A)); 

%// Fill in the values at the specified lat/lon from A 
B(inds) = A(inds); 
+0

Ja! Das hat perfekt funktioniert! Vielen Dank! –

Verwandte Themen