【发布时间】:2015-02-10 01:59:56
【问题描述】:
在 Eigen 中是否可以在 Matlab 中执行与以下操作等效的操作?
A=rand(10,10);
indices = [2,5,6,8,9];
B=A(indices,indices)
我想要一个子矩阵作为原始矩阵的视图,具有给定的非连续索引。 最好的选择是拥有原始矩阵的共享内存视图,这可能吗?
我想出了一个可行但不是很快的方法,因为它涉及非矢量化 for 循环:
MatrixXi slice(const MatrixXi &A, const std::set<int> &indices)
{
int n = indices.size();
Eigen::MatrixXi B;
B.setZero(n,n);
std::set<int>::const_iterator iInd1 = indices.begin();
for (int i=0; i<n;++i)
{
std::set<int>::const_iterator iInd2=indices.begin();
for (int j=0; j<n;++j)
{
B(i,j) = A.coeffRef(*iInd1,*iInd2);
++iInd2;
}
++iInd1;
}
return B;
}
如何才能更快?
【问题讨论】:
-
'不是很快'。它在 Matlab 中有多快,您的实现有多快?你的规格是什么?您使用的是调试模式还是发布模式?
标签: c++ matlab matrix numeric eigen