将由二项矢量构成的矩阵变换为连续零的范围

时间:2016-02-10 12:46:42

标签: numpy theano

我试图弄清楚如何在theano中象征性地进行这种转换,这是一个未确定大小的矩阵

自:

WHERE find_in_set(Order_SG.Server__, :servers) > 0 AND
. . .

要:

 [[0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1],
  [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1],
  .
  .
  ]

因此,对于每个连续的0,我想要一个增加的范围,每当我偶然发现1时,范围重置。

1 个答案:

答案 0 :(得分:1)

这是使用低效扫描的一种方法:

import theano
import theano.tensor as tt


def inner_step(x_t_t, y_t_tm1):
    return tt.switch(x_t_t, 0, y_t_tm1 + 1)


def outer_step(x_t):
    return theano.scan(inner_step, sequences=[x_t], outputs_info=[0])[0]


def compile():
    x = tt.bmatrix()
    y = theano.scan(outer_step, sequences=[x])[0]
    return theano.function([x], y)


def main():
    f = compile()
    data = [[0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1],
            [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1]]
    print f(data)

main()

运行时,会打印:

[[1 2 3 0 1 2 3 4 5 0 0 1 0 1 2 3 0]
 [1 2 3 4 5 6 7 8 0 1 2 0 0 0 0 0 0]]