有没有办法获取2D SparseMat特定行的所有非零的索引,而不会遍历该行?
以下代码使用循环打印第y行的结果。
lboxsupplier.DataSource = dsPennyburnGreg.Tables["Supplier"]
提前感谢您的任何建议!
答案 0 :(得分:0)
我没有OpenCV,但通过阅读documentation我发现了这个例子:
// prints elements of a sparse floating-point matrix
// and the sum of elements.
SparseMatConstIterator_<float>
it = sparse_mat.begin<float>(),
it_end = sparse_mat.end<float>();
double s = 0;
int dims = sparse_mat.dims();
for(; it != it_end; ++it)
{
// print element indices and the element value
const SparseMat::Node* n = it.node();
printf("(");
for(int i = 0; i < dims; i++)
printf("%d%s", n->idx[i], i < dims-1 ? ", " : ")");
printf(": %g\n", it.value<float>());
s += *it;
}
printf("Element sum is %g\n", s);
以及以下内容:
如果运行此循环,您会注意到未枚举元素 按逻辑顺序(词典编纂等)。他们也是一样的 将它们存储在哈希表中(半随机)。你可以 收集指向节点的指针并对它们进行排序以获得正确的结果 排序。但请注意,指向节点的指针可能无效 当您向矩阵添加更多元素时。这可能是由于 可能的缓冲区重新分配。
这意味着(有点明确地)数据存储在哈希表中,而不是作为索引和值的向量,或类似Eigen。它应该使您能够筛选节点而不是特定的行;
之类的东西for(; it != it_end; ++it)
{
const SparseMat::Node* n = it.node();
if(n->idx[ROW_INDEX])
std::cout << n->idx[COL_INDEX] << std::endl;
}
相应地替换ROW_INDEX
和COL_INDEX
,我不知道相关的订单。