首页 > 解决方案 > 从 numpy 中的数学表达式中删除 for 循环

问题描述

给定以下表达式,我想在不使用 for 循环的情况下计算它。i,j 的范围是相同的 (self.dims[0])。

方程

我目前的实现是:

dLoss_W1 = np.zeros(self.dims[1], self.dims[0])

for i in range(self.dims[0]):
    for j in range(self.dims[0]):
        dLoss_W1[i] = (
            d_k(self.param['W1'][i], self.param['W1_t'][j]) -
            d_k(self.param['W1'][i], self.param['W1'][j])
        )
def theta(u,v):
    return np.dot(u,v)/(np.linalg.norm(u)*np.linalg.norm(v))

def d_phi(theta):
    return 1/(2*np.pi)*1/sqrt(1-theta**2)

def d_k(u,v):
    return d_phi(theta(u,v))*(u-(u.T.dot(v).dot(u)))

def nInit(self):    
    np.random.seed(seed)
    self.param['W1'] = np.random.randn(self.dims[1], self.dims[0])     
    self.param['W2'] = np.ones(self.dims[2], self.dims[1])             
    return

def teacher(self):    
    np.random.seed(seed+1)
    self.param['W1_t'] = np.random.randn(self.dims[1], self.dims[0])     
    self.param['W2_t'] = np.ones(self.dims[2], self.dims[1])             
    return

标签: pythonnumpy

解决方案


推荐阅读