我有以下代码:

def obj(f, pis, rs):
    out = np.zeros(f.size)

    for pi, r in zip(pis, rs):
        out += r * pi / (1 + np.dot(r, f))

    return out

p = np.array([0.42, 0.08, 0.42, 0.08])
r = np.array([[-1.0, 7.0, -1.0, 0.4],
              [-1.0, 7.0, 0.5, -1.0],
              [0.2, -1.0, -1.0, 0.4],
              [0.2, -1.0, 0.5, -1.0]
              ])
f = np.array([0.25, 0.25, 0.25, 0.25])

我想把这个函数矢量化. 为什么下面的实现没有提供相同的输出:

def obj_vec(f, pis, rs):
    out = rs * pis / (1 + np.dot(r, f))

    return np.sum(out, axis=1)

应该如何定义obj_vec()呢?

推荐答案

使用矩阵乘法:

(r.T * p) @ (1 / (1 + r @ f))
array([-0.05947314,  0.72218094, -0.74877589,  0.17774817])

((r.T * p) / ( 1 +  r @ f).T).sum(1)
array([-0.05947314,  0.72218094, -0.74877589,  0.17774817])

Python相关问答推荐

时间序列分解

在Python中处理大量CSV文件中的数据

numba jitClass,记录类型为字符串

如何让剧作家等待Python中出现特定cookie(然后返回它)?

将数据框架与导入的Excel文件一起使用

使用groupby Pandas的一些操作

DataFrames与NaN的条件乘法

SQLAlchemy Like ALL ORM analog

为一个组的每个子组绘制,

多指标不同顺序串联大Pandas 模型

用渐近模计算含符号的矩阵乘法

如何在BeautifulSoup/CSS Select 器中处理regex?

在不同的帧B中判断帧A中的子字符串,每个帧的大小不同

如何从pandas DataFrame中获取. groupby()和. agg()之后的子列?

Python日志(log)模块如何在将消息发送到父日志(log)记录器之前向消息添加类实例变量

有没有办法在不先将文件写入内存的情况下做到这一点?

时间戳上的SOAP头签名无效

如何在基于时间的数据帧中添加计算值

如何通过特定导入在类中执行Python代码

将鼠标悬停在海运`pairplot`的批注/高亮显示上