如何根据第1列,第2列等对Theano中的行进行排序

时间:2016-02-13 17:28:09

标签: python sorting theano

我有一个看起来像这样的Theano数组:

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

我想基于第一列对行进行排序,对于第一列中具有相同值的行,基于第二列进行排序等等...在此示例中有3列,但理想情况下我是&# 39; d喜欢使用任意数量的列的方法。

预期结果是:

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

编辑:单元格可以有非常大的值(int64),因此将列组合在一起对我来说似乎不太可行。

2 个答案:

答案 0 :(得分:0)

在numpy中计算Theano的订单列表会更好,因为必须处理绑定的场景,这可能需要if语句。

获得订单列表后,将其转换为带有dtype =' int64'的theano ivector或vector。或者' int32'并将其用作原始矩阵的索引。

e.g。

    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]

获取重新排序矩阵的值,可以创建像

这样的theano函数
get_value = theano.function([A, order_ls], reordered_matrix)

答案 1 :(得分:-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是专为此类排序而设计的。