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:將矩陣減少爲一個我不想要的向量。 –