Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将矩阵列乘以特征向量_C++_Matrix_Vector_Eigen - Fatal编程技术网

C++ 将矩阵列乘以特征向量

C++ 将矩阵列乘以特征向量,c++,matrix,vector,eigen,C++,Matrix,Vector,Eigen,我想把矩阵A的列乘以向量v,最后得到每列的和。我使用Eigen库,编码如下: for (int j = 0 ; j< A.cols(); j++) C.col(j).noalias() = V.cwiseProduct(A.col(j)); V2 = C.colwise().sum(); 有什么想法吗?嗯。。。您要找的是一个普通的标准向量矩阵积: V2.noalias() = V.transpose() * A; .noalias()是可选的,它只在这里为您保存一个临时文件 如

我想把矩阵A的列乘以向量v,最后得到每列的和。我使用Eigen库,编码如下:

for (int j = 0 ; j< A.cols(); j++)
    C.col(j).noalias() = V.cwiseProduct(A.col(j));
V2 = C.colwise().sum();

有什么想法吗?

嗯。。。您要找的是一个普通的标准向量矩阵积:

V2.noalias() = V.transpose() * A;
.noalias()
是可选的,它只在这里为您保存一个临时文件

如果您确实需要中间矩阵
C
,那么您的两个选项应该与手工制作的for循环一样快,前提是您对它们进行更正,使它们计算出相同的内容:

C = V.asDiagonal() * A;
C = A.array().colwise() * V.array();

不要忘记启用编译器优化,例如,
-O3-march=native

什么编译器?哪些编译器标志(例如,必须打开优化)?多少时间是“慢”的,在什么硬件上?请?谢谢@AviGinsburg的回复。编译器是g++。现在时间大约是0.03秒,矩阵A的大小是(38000160)。谢谢@ggael。是的,我需要中间矩阵
C
,用于代码的其余部分。有两个选项比我手工制作的for循环更快,在其他一些情况下更慢。编译器优化已启用
03
,但不知道
-march=native
。看来这是最快的方式!
C = V.asDiagonal() * A;
C = A.array().colwise() * V.array();