2017-03-13 5 views

Antwort

2

Die erste Alternative ist es, die Spalten, die Sie ändern möchten, und binäre Indizierung zu verwenden:

A = round(rand(10, 10)); 
B = A(:, 1:5); 
B(B ~= 0) = 10; 
A(:, 1:5) = B 

Eine zweite Alternative ist eine Maske wie folgt zu verwenden:

A = round(rand(10, 10)); 
mask = zeros(size(A)); 
mask(:, 1:5) = 1; 
A(A~=0 & mask) = 10 
+0

Danke, aber ich möchte nur die ersten 5 Spalten ändern und auch nicht die Null-Elemente aber die Nicht-Null-Einsen. –

+0

Ich habe das zuerst verpasst, aber ich habe meine Antwort geändert. – m7913d

+0

Ich fügte ein B (B> 0) = 10 hinzu; aber danke! –

1

ich, dass Sie gesehen haben akzeptiere schon die richtige Antwort, also füge ich nur für die Dokumentation eine Lösung mit einer Zeile und einer Variablen hinzu, wenn es jemand bequemer findet:

A((A(:,1:5))~=0)=10 

EDIT:

Für @ m7913d Kommentar, allgemeinere Lösung für Spalten n1 bis n2 kann, BE-

A((n1-1)*size(A,1)+find(A(:,n1:n2)~=0))=10 
+0

Schöne One-Line-Lösung. Beachten Sie, dass diese Lösung nur für die ersten n Zeilen funktioniert. Das Ergebnis wird für die etwas andere Frage, bei der Sie die Spalten n1 bis n2 ändern möchten, nicht korrekt sein. – m7913d

+0

@ m7913d Sie haben absolut recht. Ich habe meine Antwort auf einen allgemeineren Fall bearbeitet – Adiel

Verwandte Themen