使用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实现会很棒。)
答案 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')