我正在搜索小部件或控件来绘制时间序列的数据.基本上绘制图(x,y),其中x和y是Nx1向量.我正在寻找,但没有找到太多,任何建议都会很棒!谢谢.
我使用的数据类型std::vector<std::vector<T> >
存储2D矩阵/数组.我想确定这个矩阵的唯一行.我正在寻找有关如何进行此操作的任何建议或指示.
我试过两种方法.
方法1:略微复杂.我为每行保留一个索引,其中0/1表示该行是否为重复值,并通过矩阵进行处理,将每个唯一行的索引存储在a中deque
.我想将结果存储在a中<vector<vector<T> >
,因此从这个索引deque中,我预先分配然后将矩阵中的行分配给返回值.
方法2:更容易阅读,并且在许多情况下比方法1更快.我保留已找到的唯一行的双端队列,然后循环遍历行并将每行与此中的所有条目进行比较deque
.
我正在将这两种方法与matlab进行比较,这些C++例程的速度要低几个数量级.有没有人对如何加快这项操作有任何聪明的想法?我希望在可能有数百万行的矩阵上执行此操作.
我在循环期间将唯一行存储在双端队列中以避免调整向量大小的成本,然后将其复制deque
到vector<vector<T> >
结果中.我已经对这个操作进行了密切的基准测试,并且它没有接近减慢操作的速度,例如,它在占用100,000行的矩阵上的运行时间不到0.5%.
谢谢,
短发
这是代码.如果有人对显示用法的更完整的示例感兴趣,请给我发表评论,我可以将一些东西放在一起.
方法1:
template <typename T>
void uniqueRows( const std::vector<std::vector<T> > &A,
std::vector<std::vector<T> > &ret) {
// Go through a vector<vector<T> > and find the unique rows
// have a value ind for each row that is 1/0 indicating if a value
// has been previously searched.
// cur : current item being compared to every item
// …
Run Code Online (Sandbox Code Playgroud)