2015-07-08 11 views
10

Sto lavorando su Torch/Lua e ho un array dataset di 10 elementi.Torcia/Lua, come selezionare un sottoinsieme di un array o di un tensore?

dataset = {11,12,13,14,15,16,17,18,19,20} 

Se scrivo dataset[1], posso leggere la struttura del primo elemento dell'array.

th> dataset[1] 
11 

Ho bisogno di selezionare solo 3 elementi tra tutti i 10, ma non so quale comando utilizzare. Se stavo lavorando su Matlab, vorrei scrivere: dataset[1:3], ma qui non funziona.

Avete qualche suggerimento?

risposta

15

In torcia

th> x = torch.Tensor{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} 

Per selezionare un intervallo, come i primi tre, utilizzare the index operator:

th> x[{{1,3}}] 
1 
2 
3 

dove 1 è l'indice 'inizio', e 3 è l'indice 'estremità' .

Vedere Extracting Sub-tensors per più alternative utilizzando Tensor.sub e Tensor.narrow


In Lua 5,2 o meno

tavoli Lua, come ad esempio la variabile dataset, non hanno un metodo per la selezione sub -ranges.

function subrange(t, first, last) 
    local sub = {} 
    for i=first,last do 
    sub[#sub + 1] = t[i] 
    end 
    return sub 
end 

dataset = {11,12,13,14,15,16,17,18,19,20} 

sub = subrange(dataset, 1, 3) 
print(unpack(sub)) 

che stampa

11 12 13 

In Lua 5,3

In Lua 5.3 è possibile utilizzare table.move.

function subrange(t, first, last) 
    return table.move(t, first, last, 1, {}) 
end 
+0

Grazie @rpattiso. Ma come farlo con un semplice tavolo? –

+0

@ DavideChicco.it vedi l'aggiornamento per uno che crea una nuova tabella. Gli iteratori o i metatables di Lua possono essere utilizzati se si desidera evitare di copiare i valori. Se usi la torcia, i tensori sono più convenienti ed efficienti. – ryanpattison

Problemi correlati