0
我有一个稀疏矩阵和一个矢量,都是用犰狳构建的。现在我想用矢量来划分矩阵,即用矩阵的第一个元素除第一列,依此类推。现在,我可以做,在一个循环:在犰狳中用矢量除矩阵
int r_num = 5000;
arma::colvec r_vec = arma::linspace(0, 1, r_num);
double dh = abs(r_vec(1)-r_vec(0));
arma::sp_cx_mat r1_matrix = arma::sp_cx_mat(r_num, r_num);
r1_matrix.diag(0).fill(0);
r1_matrix.diag(1).fill(8);
r1_matrix.diag(-1).fill(-8);
r1_matrix.diag(2).fill(-1);
r1_matrix.diag(-2).fill(1);
arma::cx_colvec divider_vec = r_vec*std::complex<double>{1.0, 0.0};
divider_vec(0) = 1;
for (size_t i = 0; i < r_num; i++)
{
if (i % 100 == 0)
std::cout << i << " of " << r_num << '\n';
r1_matrix.col(i) = r1_matrix.col(i)/divider_vec(i);
}
但极其缓慢(尤其是后我会增加r_num
之后)。当使用通常的方法
r1_matrix = r1_matrix/divider_vec;
我得到不匹配的尺寸((5000x5000)和(5000x1))的错误。还有另一种更快的方法吗?
我可能会错过一些东西,但是,难道你不能只计算矢量的“逆”,然后乘以矩阵? – Zouch
你的意思是,计算'r1_matrix *(1/divider_vec)'? –
@Zouch:将矩阵减少为一个我不想要的向量。 –