2016-06-06 5 views
5

Ich würde gerne wissen, ob es möglich ist, alle außer einem Element (nach Index) in einem Julia-Array zu wählen.Julia alle bis auf ein Element in Array/Matrix wählen

Zum Beispiel in R Sprache, um nicht eine bestimmte Zeile in einer Matrix wählen würde man schreiben:

a = matrix(1:9, 3, 3) 
a 
1 4 7 
2 5 8 
3 6 9 

und dann:

a[-2, ] 
1 4 7 
3 6 9 

Jetzt würde ich die gleiche Sache zu tun in Julia. Ich habe versucht, logische Operatoren zu verwenden, aber ich kann keinen Weg finden, einen bestimmten Index (un) auszuwählen. Hier ist, was ich versucht:

a = rand(3,3) 
a[.!= 2, :] 
ERROR: syntax "!=" is not a unary operator 

oder wie in R:

a[-2, :] 

und ein paar andere Optionen. Was ist in julia Arbeit ist die folgende:

a[a .>= .5, :] 

oder

a[[2,3], :] 

die Sekunde und dritte Zeile auszuwählen. Jedenfalls würde ich wirklich gerne wissen, wie man alle außer einem eines bestimmten Elements (z. B. einer Reihe) in einem Julia-Array auswählt. Hier

Antwort

7

ist eine Option:

A = rand(3,3) 
B = A[1:end .!= 2,:] 

1:end wird eine vollständige Liste des Zeilenindizes (Sie können auch 1:size(A,1) verwenden können) und dann .!= (man beachte den . Anzeigeelement weist Vergleich) wählt die Indizes nicht gleich 2.

Wenn Sie auf diese Weise Spalten auswählen wollte, würden Sie verwenden:

C = A[:, 1:end .!= 2] 

Beachten Sie, dass das Schlüsselwort end automatisch dem letzten Indexwert der Zeile, Spalte oder anderen Dimension entspricht, auf die Sie verweisen.

Hinweis: Antwort aktualisiert Verbesserungen zu reflektieren (mit end statt size()) vorgeschlagen von @ Matt B in den Kommentaren.

+0

Schöne Antwort! Ich werde noch etwas warten, bevor ich die Frage stelle, nur um zu sehen, was noch kommt. Aber deine Herangehensweise ist wirklich nett. – Vincent

+1

Das macht mein Leben so viel einfacher. Jetzt kann ich vermeiden, hässliche verschachtelte For-Schleifen zu schreiben. – Vincent

+2

Noch mehr Spaß: Sie können 'end' Ausdrücke wie folgt verwenden:' A [1: end.! = 2,:] '. Semantisch ist es genau das Gleiche - der Parser behandelt nur den richtigen "Größen" -Aufruf für Sie. –

Verwandte Themen