1
나는 Theano를 사용하여 평행 템퍼링 Gibbs 샘플링을 구현 중입니다. 나는 행렬 X
을 취하고 행의 일부를 교체하는 Theano 함수를 작성하려고합니다. 어떤, 다음 X[i]
및 X[i+1]
바꿔야합니다, 즉 행을 바꿔야 나타내는 swaps
명명 된 기호식 이진 벡터가 있습니다. 스와핑 순서는 중요하지 않습니다. Theano 기호 행의 행 바꾸기
swaps
벡터를 통해가는
theano.scan
를 작성하려고하고
X
행 단위의 스와핑을 수행합니다. 문제는 Theano가 기호 변수를 가지고
X[pos], X[pos + 1] = X[pos + 1], X[pos]
과 같은 일을 할 수 없다는 것입니다. 다음은 내가하려고하는 간단한 코드입니다.
import numpy as np
import theano
import theano.tensor as T
def swap(swp, pos, idx):
if swp: idx[pos], idx[pos + 1] = idx[pos + 1], idx[pos]
return idx
max_length = 10
swaps = T.ivector('swaps')
idx = T.ivector('idx')
pos = T.iscalar('pos')
new_idx, updates = theano.scan(swap,
sequences=[swaps, T.arange(max_length)],
outputs_info=idx)
do_swaps = theano.function([swaps, idx], new_idx[-1], updates=updates)
idx_swapped = do_swaps(np.array([1, 1, 0, 1]), np.arange(5))
print idx_swapped
올바른 방법으로 수행 할 수있는 아이디어가 있습니까?
인덱스의 벡터를 먼저 교환하고 ('T.arange (X.shape [0])') 한 번에 전체 배열을 다시 색인하고자 할 수도 있습니다 ('X [p]', 여기서'p '는 순열 색인의 목록이다) – eickenberg