2016-02-13 61 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) 
相关问题