You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用numpy.logaddexp实现指数求和后取对数操作?

用numpy.logaddexp实现行对数求和的解决方案

核心需求拆解

  • 先让2×2矩阵M和二维向量v按列相加,得到[[11, 22], [13, 24]]
  • 对每行的两个值计算log(exp(x) + exp(y)),最终得到长度为2的向量
  • 解决现有代码输出矩阵的问题,同时搞懂logaddexp的out参数用法

分步实现与解释

1. 实现列相加

利用numpy的广播机制,直接让v和M对应列元素相加即可,无需额外变形(你写的v[None, :]也能实现,但M + v更简洁):

import numpy as np

M = np.array([[1, 2], [3, 4]])
v = np.array([10, 20])
added_matrix = M + v
# 输出结果:array([[11, 22], [13, 24]])

2. 用logaddexp实现行对数求和

np.logaddexp(a, b)的作用就是直接计算log(exp(a) + exp(b)),完美避免指数溢出问题。要实现每行的计算,只需提取每行的两个元素分别传入:

# 提取每行的第一个和第二个元素,逐行计算
result = np.logaddexp(added_matrix[:, 0], added_matrix[:, 1])
# 输出结果:array([22.0000454 , 24.00000037])

这里因为exp(22)远大于exp(11),所以求和后的对数近似等于22,第二个值同理近似24,属于正常数值结果。

3. 理解logaddexp的out参数

out参数用来指定存储计算结果的数组,要求数组形状和输出结果完全匹配,适合需要复用内存的场景:

# 预先创建一个和结果形状一致的空数组
output_array = np.empty(2)
# 将计算结果直接存入output_array
np.logaddexp(added_matrix[:, 0], added_matrix[:, 1], out=output_array)
# 此时output_array就是计算结果:array([22.0000454 , 24.00000037])

完整可运行代码

import numpy as np

M = np.array([[1, 2], [3, 4]])
v = np.array([10, 20])

# 列相加得到目标矩阵
added_matrix = M + v

# 计算每行的对数求和
result = np.logaddexp(added_matrix[:, 0], added_matrix[:, 1])
print(result)

# 使用out参数的版本
output_array = np.empty_like(result)
np.logaddexp(added_matrix[:, 0], added_matrix[:, 1], out=output_array)
print(output_array)

内容的提问来源于stack exchange,提问作者jay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 12:05:31