Die Operation besteht aus zwei Arrays X
und idx
von gleicher Länge, wobei die Werte von idx
zwischen 0 bis (k-1) mit dem Wert von k variieren können.Wie macht man einen elementweisen konditionalen Indexvergleich in Theano?
Dies ist der allgemeine Python-Code, der dies veranschaulicht.
import numpy as np
X = np.arange(6) # Just for a sample of elements
k = 3
idx = numpy.array([[0, 1, 2, 2, 0, 1]]).T # Can only contain values in [0..(k-1)]
np.array([X[np.where(idx==i)[0]] for i in range(k)])
Beispielausgabe:
array([[0, 4],
[1, 5],
[2, 3]])
Hinweis, dass es tatsächlich ein Grund für mich idx
als Matrix darstellt und nicht als Vektor. Es wurde im Rahmen seiner Berechnung auf numpy.zeros((n,1))
initialisiert, wobei n
die Größe X
.
habe ich versucht, diese
import theano
import theano.tensor as T
X = T.vector('X')
idx = T.vector('idx')
k = T.scalar()
c = theano.scan(lambda i: X[T.where(T.eq(idx,i))], sequences=T.arange(k))
f = function([X,idx,k],c)
wie so in Theano implementieren Aber ich erhielt diesen Fehler in Zeile, wo c
definiert:
TypeError: Wrong number of inputs for Switch.make_node (got 1((<int8>,)), expected 3)
Gibt es eine einfache Möglichkeit, dies in Theano zu implementieren?