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

如何利用布尔数组提取Eigen::VectorXd子数组并计算均值?

在Eigen中实现布尔索引提取元素并计算均值

Eigen没有像NumPy那样直接支持布尔数组索引的语法,但可以通过以下几种方式实现你需要的功能:

方法1:手动遍历收集元素

这是最直接的实现方式,遍历布尔掩码,收集符合条件的元素并计算均值:

// 预分配空间,提升效率
Eigen::VectorXd fixed_values;
fixed_values.reserve(fixed_indices.count());

for (int i = 0; i < fixed_indices.size(); ++i) {
    if (fixed_indices(i)) {
        fixed_values.push_back(0.5 * (xl(i) + xu(i)));
    }
}

方法2:构建索引列表后批量提取

先收集所有fixed_indices为true的位置索引,再用Eigen的整数索引提取功能批量获取元素并计算,这种方式更符合Eigen的向量操作风格,效率更高:

// 收集符合条件的索引
std::vector<int> indices;
indices.reserve(fixed_indices.count());
for (int i = 0; i < fixed_indices.size(); ++i) {
    if (fixed_indices(i)) {
        indices.push_back(i);
    }
}

// 将std::vector转换为Eigen整数向量
Eigen::VectorXi eigen_indices = Eigen::Map<Eigen::VectorXi, Eigen::Unaligned>(indices.data(), indices.size());

// 批量提取并计算均值
Eigen::VectorXd fixed_values = 0.5 * (xl(eigen_indices) + xu(eigen_indices));

补充说明

  • fixed_indices.count()可以快速获取布尔向量中true的数量,用来预分配容器空间,避免频繁内存分配。
  • Eigen的Vector<bool>是特殊的位压缩容器,访问效率略低于普通向量,但count()方法是优化过的,性能表现良好。

内容的提问来源于stack exchange,提问作者Tom M. Ragonneau

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 21:00:06