2016-02-13 53 views
0

我有一個Theano陣列看起來像這樣:如何根據第一列,然後第2列Theano行進行排序,等

0 43 1 
4 8 5 
0 41 8 
4 8 4 

我希望基於第一列中的行進行排序,並在第一列中具有相同值的行,根據第二列進行排序等......在這個例子中有3列,但理想情況下,我希望該方法可以處理任意數量的列。

預期的結果是:

0 41 8 
0 43 1 
4 8 4 
4 8 5 

編輯:電池可以有非常大的值(Int64的),所以結合在一起列看起來並不像一個可行的解決方案給我。

回答

-2

假設您的數據的格式一致,您可以簡單地使用sorted進行詞法排序。

假設這是存儲在一個文本文件,你可以做:

with open('foo.txt', 'r') as inputfile: 
    lines = inputfile.read().splitlines() 
    with open('bar.txt', 'w') as outputfile: 
     outputfile.write('\n'.join(sorted(lines))) 

爲什麼?因爲空格出現在詞彙排序的數字之前,所以' 8'小於'10'。 ASCII是專門爲此類排序而設計的。

+0

一個theano功能雖然這是事實的Python數據,Theano數組不能按這種方式排序。符號排序是必需的。 –

+0

但是爲什麼我會下降?即使OP沒有提出正確的問題,我的答案也能滿足最初的問題。 –

+1

問題是如何對* Theano *數組進行排序。 Python的'sorted'函數不能做到這一點。 –

0

在numpy中計算Theano的順序列表最好,因爲必須處理綁定的場景,這可能需要if語句。

獲得訂單列表後,將其轉換爲dan​​o ='int64'或'int32'的theano ivector或vector,並將其用作原始矩陣的索引。

例如

0 43 1 
A = 4 8 5 
    0 41 8 
    4 8 4 

計算順序列表中NUMP,從而導致b = [2,0,3,1]

A = theano.matrix() 
order_ls = theano.tensor.ivector(name='orderlist') 
reordered_matrix = A[order_ls] 

得到重新排序矩陣的值,我們可以創建一個像

get_value = theano.function([A, order_ls], reordered_matrix) 
相關問題