在MATLAB中,我执行以下操作:
z = diag(c)*D*x;
idxN = z<0; idxP = z>=0; % logical indexing
y1 = sum(-z(idxN))+sum(arrayfun(@(x) log(exp(x)+1),z(idxN)));
我正在尝试制定一个Python:
z = np.diagflat(c).dot(D).dot(x)
idxN = z<0, idxP = z>=0
y1 = np.sum(-z[idxN])+np.sum(math.log(np.exp(x)+1),z[idxN]);
上面的代码片段无法正常工作,因为我想我必须对某个地方进行矢量化处理?
感谢您的投入。
答案 0 :(得分:1)
arrayfun
是MATLAB中循环的单行包装器。在Python中,您可以这样做:
y1 = np.sum(-z[idxN]) + np.sum([math.log(np.exp(x)+1) for x in z[idxN]])