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

如何计算两个一维向量的外和(非外积),可通过np.einsum实现吗?

外和计算的实现方案

以下所有方案均为纯矢量化实现,无Python层循环,性能远高于原生for循环写法。


方法1:numpy广播实现(最简洁高效)

通过维度扩展触发广播机制直接相加,代码易读性最高:

import numpy as np
a = np.arange(3)
b = np.arange(2)

# 维度扩展后广播相加
out = a[:, None] + b
print(out)
# 输出:
# [[0 1]
#  [1 2]
#  [2 3]]

如果需要转置结果,调整维度扩展顺序即可:out = b[:, None] + a


方法2:np.add.outer 内置外和实现

numpy所有通用运算函数都支持outer方法,可直接实现对应运算的外操作,语义最明确:

out_outer = np.add.outer(a, b)
print(out_outer)
# 输出和广播实现完全一致

方法3:np.einsum 实现

受einsum默认先乘后求和的运算逻辑限制,无法用单条einsum直接实现加法类外运算,可分两次广播后相加:

# 分别将a、b广播到ij形状后相加
out_einsum = np.einsum('i->ij', a) + np.einsum('j->ij', b)
print(out_einsum)
# 输出和上述方法完全一致

该写法适合需要和其他einsum运算逻辑结合的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:39:05