Операция в теано, которая всегда добавляет измерения

Я ищу способ написать функцию, которая принимает два теано-выражения a и b и выполняет над ними поэлементную операцию (скажем, сложение), чтобы dimensions(a + b) = dimensions(a) + dimenisons(b).

В моем случае a будет иметь одно измерение, а b — два или три.

Я думал о том, чтобы сделать что-то вроде a.dimshuffle('x', 'x', 0) + a.dimshuffle(0, 1, 'x') для двумерного b, но я не знаю, как получить его количество измерений. b.shape является теано-выражением и не поддерживает len().

Конечной целью этого является вычисление расстояния от полилинии в нескольких точках, этот метод будет использоваться несколько раз, где a будет иметь форму (number_of_control_points,), а b будет координатами точек выборки 2D или 3D сетки, в которых я буду оценивать расстояние .

Могу ли я получить количество измерений выражения как обычное значение Python без оценки выражения?

Альтернативный вопрос: есть ли способ выполнить операцию напрямую без явного перетасовки?


person cube    schedule 30.10.2016    source источник


Ответы (1)


используйте tile с небольшой магией вещания:

import theano as th
import theano.tensor as T

def general_outer(elem_op, a, b):
    a_shape = T.shape(a)
    b_shape = T.shape(b)
    return elem_op(T.tile(a, T.join(0,T.ones_like(a_shape),b_shape), b)) #note the broadcast
person Kh40tiK    schedule 04.11.2016