Ich habe eine Matrix und ich bin daran interessiert, Werte zu ändern, die eine bestimmte Bedingung innerhalb dieser Matrix unterschiedlich erfüllen, je nachdem, wo sie sind. Sagen wir, ich habe eine Matrix SmallPic. Wie erhalte ich eine Matrix smallPicB mit den gleichen Dimensionen, die alle Werte über 50 in den ersten zwei Spalten auf 255 geändert haben, während diejenigen, die in der dritten und vierten Spalte sind, in eine 180 geändert werden?Ändern einiger Werte nach einem logischen Index in einem bestimmten Bereich einer Matrix
Ich habe diesen Code, der, aber es ist ziemlich hässlich und erfordert Aufspalten der Matrix und verketten es wieder funktioniert:
smallPic1=smallPic(:,1:2);smallPic1(smalllPic1>50)=255;
smallPic2=smallPic(:,3:4);smallPic2(smalllPic2>50)=180;
smallPicB = [smalllPic1 smalllPic2];
Wie würden Sie kombinieren die logische Index mit dem Skalar-Index in einem Befehl?
Was nicht funktioniert, ist dies:
smallPic(:,smallPic(:,3:4)>50) = 180
Hier ist die zweite Erwähnung smallpic innerhalb der Klammern erlaubt keine Indizierung in die richtige Position von smallpic, weil es nicht die gleichen Abmessungen wie smallpic hat . Dieser Befehl ersetzt also Werte in den ersten beiden Spalten von smallPic, die sich in derselben Zeile wie die Werte in der dritten und vierten Spalte über 50 befinden, statt die Werte in der dritten und vierten Spalte selbst zu ersetzen.
Haben Sie noch weitere Vorschläge?
über Ihre Bearbeitung: Deshalb habe ich J definiert, die Spalte Index aller Mitglieder speichert. – saastn