2016-06-06 23 views
5

Vorrei sapere se è possibile selezionare tutti tranne un elemento (per indice) in un array julia.julia seleziona tutti tranne un elemento in matrice/matrice

Per esempio in linguaggio R, al fine di non selezionare una particolare riga in una matrice si potrebbe scrivere:

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

e poi:

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

Ora vorrei fare la stessa cosa a julia. Ho provato ad utilizzare operatori logici, ma non riesco a trovare un modo per (dis) selezionare un indice particolare. Ecco quello che ho provato:

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

o come in R:

a[-2, :] 

e poche altre opzioni. Ciò che funziona in julia è la seguente:

a[a .>= .5, :] 

o

a[[2,3], :] 

per selezionare il secondo e terza fila. Ad ogni modo mi piacerebbe davvero sapere come selezionare tutto tranne uno di un particolare elemento (riga per esempio) in un array julia.

risposta

7

Ecco un'opzione:

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

1:end ottiene un elenco completo di indici riga (si potrebbe anche usare 1:size(A,1)) e poi .!= (notare il confronto . indicando elemento saggio) seleziona gli indici non uguale a 2.

Se si voleva selezionare le colonne in questo modo si usa:

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

Si noti che la parola chiave end corrisponderà automaticamente all'ultimo valore di indice della riga, della colonna o di un'altra dimensione a cui si fa riferimento.

Nota: risposta aggiornata per riflettere i miglioramenti (utilizzando end invece di size()) suggerite da @ Matt B nei commenti.

+0

Bella risposta! Aspetterò un po 'più a lungo prima di porre la domanda ad ansata solo per vedere cos'altro viene fuori. Ma il tuo approccio è davvero carino. – Vincent

+1

Questo rende la mia vita molto più facile. Ora posso evitare di scrivere brutti nodi per i loop. – Vincent

+2

Ancora più divertente: puoi usare espressioni 'end' come questa:' A [1: end.! = 2,:] '. Semanticamente, è esattamente la stessa cosa: il parser si occupa solo di trovare la giusta chiamata "size" per te. –

Problemi correlati