用犰狳用相应的向量替换索引矩阵
replacing matrix of indices with corresponding vector with armadillo
我有一个 arma::umat 矩阵,其中包含对应于包含 1 或 -1 的 arma::vec 向量的索引:
arma::umat A = { {8,9,7,10,6}, {5,3,1,2,4}};
arma::vec v = {-1, 1, 1, 1, -1, -1, 1, -1, -1 ,1};
我想用向量中的相应值替换矩阵中的每个元素,因此输出如下所示:
A = {{-1,-1,1,1,-1},{-1,1,-1,1,1,1}}
有什么建议吗?
谢谢
将结果保存到 A
不是一个选项,因为 A
包含无符号整数,并且您的 v
向量有双精度数。只需创建一个 arma::mat
来包含结果并为每一行循环以相应地索引 v
。一种方法是使用 .each_row
member.
#include <armadillo>
int main(int argc, char *argv[]) {
arma::umat A = {{7, 8, 6, 9, 5}, {4, 2, 0, 1, 3}};
arma::vec v = {-1, 1, 1, 1, -1, -1, 1, -1, -1, 1};
arma::mat result(A.n_rows, A.n_cols);
auto lineIdx = 0u;
// We capture everything by reference and increase the line index after usage.
// The `.st()` is necessary because the result of indexing `v` is
// a "column vector" and we need a "row vector".
A.each_row([&](auto row) { result.row(lineIdx++) = v(row).st(); });
result.print("result");
return 0;
}
此代码打印
result
-1.0000 -1.0000 1.0000 1.0000 -1.0000
-1.0000 1.0000 -1.0000 1.0000 1.0000
我有一个 arma::umat 矩阵,其中包含对应于包含 1 或 -1 的 arma::vec 向量的索引:
arma::umat A = { {8,9,7,10,6}, {5,3,1,2,4}};
arma::vec v = {-1, 1, 1, 1, -1, -1, 1, -1, -1 ,1};
我想用向量中的相应值替换矩阵中的每个元素,因此输出如下所示:
A = {{-1,-1,1,1,-1},{-1,1,-1,1,1,1}}
有什么建议吗? 谢谢
将结果保存到 A
不是一个选项,因为 A
包含无符号整数,并且您的 v
向量有双精度数。只需创建一个 arma::mat
来包含结果并为每一行循环以相应地索引 v
。一种方法是使用 .each_row
member.
#include <armadillo>
int main(int argc, char *argv[]) {
arma::umat A = {{7, 8, 6, 9, 5}, {4, 2, 0, 1, 3}};
arma::vec v = {-1, 1, 1, 1, -1, -1, 1, -1, -1, 1};
arma::mat result(A.n_rows, A.n_cols);
auto lineIdx = 0u;
// We capture everything by reference and increase the line index after usage.
// The `.st()` is necessary because the result of indexing `v` is
// a "column vector" and we need a "row vector".
A.each_row([&](auto row) { result.row(lineIdx++) = v(row).st(); });
result.print("result");
return 0;
}
此代码打印
result
-1.0000 -1.0000 1.0000 1.0000 -1.0000
-1.0000 1.0000 -1.0000 1.0000 1.0000