2015-07-08 6 views
10

Ich arbeite an Torch/Lua und habe ein Array dataset von 10 Elementen.Torch/Lua, wie wählt man eine Teilmenge eines Arrays oder Tensors?

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

Wenn ich dataset[1] schreibe, kann ich die Struktur des ersten Elements des Arrays gelesen.

th> dataset[1] 
11 

Ich muss nur 3 Elemente unter allen 10 auswählen, aber ich weiß nicht, welchen Befehl zu verwenden. Wenn ich an Matlab arbeite, würde ich schreiben: dataset[1:3], aber hier funktioniert nicht.

Haben Sie Vorschläge?

Antwort

15

In Torch

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

Um einen Bereich auswählen, wie die ersten drei, verwenden the index operator:

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

wobei 1 die 'Start' Index und 3 ist der Index 'Ende' .

Siehe Extracting Sub-tensors für mehr Alternativen mit Tensor.sub und Tensor.narrow


In Lua 5,2 oder weniger

Lua Tabellen, wie Ihre dataset Variable, nicht über ein Verfahren zum Unter Auswahl -Strecken.

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)) 

die

11 12 13 

In Lua 5.3

In Lua 5.3 druckt Sie table.move verwenden können.

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

Dank @rpattiso. Aber wie macht man das mit einem einfachen Tisch? –

+0

@ DavideChicco.it siehe Update für eine, die eine neue Tabelle erstellt. Lua's Iteratoren oder Metatables können verwendet werden, wenn Sie das Kopieren der Werte vermeiden wollen. Wenn Sie Fackel verwenden, sind Tensoren bequemer und effizienter. – ryanpattison

Verwandte Themen