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

如何通过C++ Eigen库正确获取矩阵L1范数?

在Eigen中获取矩阵L1范数的便捷方法

你遇到的问题是因为Eigen的lpNorm<1>()默认将矩阵视为列向量展开来计算向量的L1范数,所以得到的是所有元素绝对值的总和,而非矩阵的L1算子范数(列绝对值和的最大值)。

最便捷的解决方案:使用operatorNorm<1>()

Eigen提供了专门计算矩阵算子范数的方法operatorNorm<p>(),其中<1>就对应矩阵的L1范数,直接调用即可:

using namespace Eigen;

int main()
{
    MatrixXd A(2, 2);
    A << 375.0, 374.0,
         752.0, 750.0;
    std::cout << A << std::endl;

    // 计算矩阵L1范数
    std::cout << "矩阵L1范数:" << A.operatorNorm<1>() << std::endl;
  
    return 0;
}

这段代码的输出会是:

375 374
752 750
矩阵L1范数:1127

补充说明

  • operatorNorm<1>()内部已经实现了“列绝对值求和取最大值”的逻辑,和你之前的手动实现等价,但语义更清晰、调用更简洁。
  • 同理,Eigen还支持:
    • operatorNorm<2>():计算矩阵的谱范数(最大奇异值)
    • operatorNorm<Infinity>():计算矩阵的无穷范数(行绝对值和的最大值)

内容的提问来源于stack exchange,提问作者苏茂江

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 11:46:02