c++ - 如何在 C++/犰狳中去掉不连续的索引
问题描述
我正在寻找一种干净的方法来使用 C++ 的犰狳线性代数库来摆脱非连续索引。我在下面包含了一些代码,但似乎可能有更好的方法来做到这一点。任何建议表示赞赏。
以下代码适用于ind
从(列)向量中删除索引a
,但感觉很笨重。
for(uword k = ind.n_elem; k>0; k--){
a.shed_row(ind(k-1));
}
有什么想法吗?
解决方案
这是使用模板化函数根据uvec
要排除的(排序的)索引删除行的一种方法。你从那里得到缺失的索引std::set_difference
,然后从那里去。
#define ARMA_USE_CXX11
#include <armadillo>
#include <iostream>
template <class T>
T drop_rows(T a, arma::uvec exclude) {
arma::uvec full_range = arma::regspace<arma::uvec>(0, a.n_rows - 1);
std::vector<int> diff;
std::set_difference(full_range.begin(), full_range.end(),
exclude.begin(), exclude.end(),
std::inserter(diff, diff.begin()));
T b = a.rows(arma::conv_to<arma::uvec>::from(diff));
return b;
}
int main() {
arma::uvec exclude = {0, 1, 4};
arma::vec a = arma::linspace<arma::vec>(100, 500, 5);
arma::vec b = drop_rows(a, exclude);
std::cout << b << std::endl;
arma::mat A = arma::mat(5, 5, arma::fill::eye);
arma::mat B = drop_rows(A, exclude);
std::cout << B << std::endl;
return 0;
}
推荐阅读
- php - 如果行不存在或不匹配,则 Php Loop TD
- python - 在 Python 中确定目录大小的最有效方法
- javascript - 有没有办法在 d3 树布局中折叠或分组子节点?
- bash - Bash - 根据主键顺序排列数据而不显示主键
- python - Python + Pandas 从多个 URL 获取 JSON 数据以将 CSV 写入单独的列中,以分号作为分隔符
- visual-studio - 为什么当我使用 Postman 时我的 SuiteQL POST 请求有效,但是当我在 VS Code 终端中卷曲相同的代码时,它返回“INVALID_LOGIN”
- kotlin - Kotlin 集合库中的 `runningFold` 和 `scan` 方法有什么区别吗?
- mongodb - MongoDB如何实现聚合
- python - 在 Tensorflow/Keras 中查看隐藏层输出的最简单方法是什么?
- python - 如何将熊猫数据框列从字符串转换为浮点数组?