[英]Should i use std::vector of std::unique_ptr<T[]> if memory is sparse and i'm not going to resize
[英]What type of sparse vector should I use?
數據
我有N
索引的不同(排序)向量( std::vector<unsigned int>
)。 索引在[0; L-1]。 這是有關此數據的兩個經驗法則:
因此,具有N=10
向量和L = 200
的可能數據集可能是
{45, 110, 119, 145, 170}
{9, 45, 110, 145, 178, 170}
{45, 145}
{45, 178, 183}
{45, 53, 110, 170}
{9, 119, 123, 179}
{9, 45, 119, 130, 131, 170, 190, 199}
{9, 45, 110, 170, 199}
{31, 45, 145}
{9, 178, 183}
目標
我想計算每個索引的頻率。 我會做類似的事情
std::vector<double> computeFrequencies(std::vector<std::vector<unsigned int>>& data)
{
assert(data.size() == N);
std::vector<double> frequencies(L);
for (unsigned Ni = 0 ; Ni < N ; Ni++)
{
for (unsigned i = 0 ; i < data[Ni].size() ; i++)
{
assert(data[Ni][i] < L)
frequencies[data[Ni][i]]++;
}
}
for (unsigned i = 0 ; i < L; i++)
{
frequencies[i] /= (double) N;
}
return(frequencies);
}
然后,我將再次循環遍歷一次由computeFrequencies
函數返回的對象。
for (unsigned i = 0 ; i < L; i++)
{
foo(frequencies[i]);
}
題
對象frequencies
包含很多零,因此我應該使用稀疏矢量。 我對稀疏矩陣了解不多。 我應該使用哪種類型的稀疏向量?
我正在考慮使用boost::numeric::ublas::coordinate_matrix<double><double>
因為當我遍歷所有N
向量時,我會不斷添加新的非零值,並且我認為坐標矩陣將非常適合處理接着就,隨即。 請注意,通常來說,對於此功能,我更擔心RAM的使用而不是計算時間。
看起來稀疏的向量表示形式不太適合您的問題。
要完成您描述的任務:
foo
。 您甚至可以同時執行兩個步驟,完全避免了將數據復制到新結構中的需要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.