Il codice è qui sotto:Come posso vettorizzare questo per ciclo in 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
Per calcolare dW in modo più efficiente, come vettorizzare questo ciclo for?
Con valori di ripetizione del 'y' index,' - = 'può avere problemi di buffering. È qui che il 'ufunc'' .at' può aiutare. – hpaulj
@hpaulj Capito, grazie – Eric
Quindi la prima riga 'masked = np.where (flag> 0, X.T [..., np.newaxis], 0)' usa la trasmissione, geniale! Quindi, un modo per la vettorizzazione è aumentare la dimensione? –