如何根据int位置向量切换theano矩阵

时间:2015-06-07 03:07:23

标签: python matrix gpgpu theano

使用theano张量运算,如何基于向量的对应行索引上的整数位置指示符(即| v | =矩阵的行),在矩阵的每一行上切换一个单元格。例如,给定一个100x5的零矩阵

M = [
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0],
    ...
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0]
] # |M| = 100x5

和[0,4]范围内的整数的100元素向量。

V = [2, 4, ..., 0, 2] # |V| = 100, max(V) = 4, min(V) = 0

更新(或创建另一个)矩阵M到

M = [
    [0, 0, 1, 0, 0],
    [0, 0, 0, 0, 1],
    ...
    [1, 0, 0, 0, 0],
    [0, 0, 1, 0, 0]
] # |M| = 100x5

(我知道如何使用传统代码迭代地执行此操作,但我想将其作为GPU上算法的一部分运行而不会使我的输入复杂化,这是当前的矢量V,所以直接theano实现会很棒。)

1 个答案:

答案 0 :(得分:1)

我自己想出了答案。此操作称为one-hot,支持Theano's extra_ops package中的“to_one_hot”。代码:

M_one_hot = theano.tensor.extra_ops.to_one_hot(V, 5, dtype='int32')