Kod jest poniżej:Jak mogę wektoryzować to dla pętli w numpy?
import numpy as np
X = np.array(range(15)).reshape(5,3) # X's element value is meaningless
flag = np.random.randn(5,4)
y = np.array([0, 1, 2, 3, 0]) # Y's element value in range(flag.shape[1]) and Y.shape[0] equals X.shape[0]
dW = np.zeros((3, 4)) # dW.shape equals (X.shape[1], flag.shape[1])
for i in xrange(5):
for j in xrange(4):
if flag[i,j] > 0:
dW[:,j] += X[i,:].T
dW[:,y[i]] -= X[i,:].T
Aby bardziej efektywnie, jak to wektorować pętli obliczyć DW?
z powtórzeniami wartości w Indeks 'y',' - = 'może mieć problemy z buforowaniem. Tam może pomóc "ufunc'' .at'. – hpaulj
@hpaulj Rozumiem, dzięki – Eric
Tak więc pierwsza linia 'masked = np.where (flag> 0, X.T [..., np.newaxis], 0)' użyj nadawania, genialny! Więc jednym ze sposobów wektoryzacji jest zwiększenie wymiaru? –