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

如何计算每个qm对应的max_{ui,uj∈U}|qm^T(ui-uj)|最大值?

问题解决方案

首先,你要计算的max_{ui,uj∈U}|qm^T(ui-uj)|可以通过数学简化避免生成所有ui-uj组合:

  • 展开点积可得:qm^T(ui-uj) = qm·ui - qm·uj
  • 这个差值的绝对值的最大值,等于max(qm·ui) - min(qm·ui)(因为最大点积减最小点积的结果是非负的,绝对值可直接省略)

实现代码

import numpy as np

n = 300
u1 = np.random.uniform(0.5, 4.5, size=n)
u2 = 2 / u1 + np.random.normal(scale=0.09, size=n)
u = np.array([u1, u2])  # 形状 (2, 300)

d = np.random.uniform(0.0, np.pi, size=100)
q = np.array([np.cos(d), np.sin(d)])  # 形状 (2, 100)

# 计算每个qm与所有ui的点积,得到(100, 300)的数组,每行对应一个qm的点积结果
dot_products = q.T @ u

# 对每个qm对应的点积数组,取最大值减最小值,得到最终结果
results = np.max(dot_products, axis=1) - np.min(dot_products, axis=1)

# 输出结果形状,确认是100个元素对应m=1到100
print(results.shape)  # 输出 (100,)

错误原因说明

你之前使用的u-u是数组自身相减,得到的是全0数组,因此点积结果必然为0。而通过数学转化,我们不需要遍历所有ui-uj组合,既简化了代码又提升了计算效率(尤其当n较大时,这种方法的时间复杂度从O(n²)降到O(n))。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 03:05:02