所以我需要转换以下行
np.mean([-y[i] * X[i] * (1 - 1 / (1 + np.exp( - np.dot(X[i],w) * y[i]))) for i in range(X.shape[0])], axis = 0)
其中y.shape = (N,)
,X.shape = (N,M)
,w.shape = (M,)
输出的形状必须是(M,)
。
我无法弄清楚要使用哪些numpy函数(dot,inner或smth)。我会很感激任何提示=)
答案 0 :(得分:1)
这是一种矢量化方法,利用效率matrix-multiplication
和np.dot
-
n = y.shape[0]
exp_val = (1 - 1 / (1 + np.exp(-np.dot(X,w)*y)))
out = -(y*exp_val).dot(X)/n
我们基本上分两部分来解决/矢量化:
1)通过执行np.dot(X[i],w) * y[i]
向量化np.dot(X,w)
,从而一次性执行所有这些迭代点积。
2)使用mean
模拟y[i] * X[i] * exponential_part
的{{1}},其执行总和减少,然后除以减少轴上的元素数。
运行时测试和验证
方法 -
dot-product
计时 -
def original_app(y,X,w):
return [np.mean([-y[i] * X[i] * (1 - 1 / (1 + np.exp( - \
np.dot(X[i],w) * y[i]))) for i in range(X.shape[0])], axis = 0)]
def vectorized_app(y,X,w):
n = y.shape[0]
exp_val = (1 - 1 / (1 + np.exp(-np.dot(X,w)*y)))
out = -(y*exp_val).dot(X)/n
return out