我正在尝试实现 MATLAB function 的功能sparse
。
在稀疏矩阵中的特定索引处插入一个值,这样:
如果矩阵中已经存在具有相同索引的值,则添加新值和旧值。
否则,新值将附加到矩阵中。
该功能addNode
正确执行,但问题是它非常慢。我在循环中调用了这个函数大约 100000 次,程序运行时间超过 3 分钟。而 MATLAB 在几秒钟内完成这项任务。有什么办法可以优化代码或者使用stl算法代替我自己的函数来实现我想要的吗?
代码:
struct SparseMatNode
{
int x;
int y;
float value;
};
std::vector<SparseMatNode> SparseMatrix;
void addNode(int x, int y, float val)
{
SparseMatNode n;
n.x = x;
n.y = y;
n.value = val;
bool alreadyPresent = false;
int i = 0;
for(i=0; i<SparseMatrix.size(); i++)
{
if((SparseMatrix[i].x == x) && (SparseMatrix[i].y == y))
{
alreadyPresent = true;
break;
}
}
if(alreadyPresent)
{
SparseMatrix[i].value += val;
if(SparseMatrix[i].value == 0.0f)
SparseMatrix.erase(SparseMatrix.begin + i);
}
else
SparseMatrix.push_back(n);
}