我需要一个函数,该函数接受向量并将其增大到新的大小,使用插值法(线性很好)来填补数据的空白。
function(vector<double> &vect, int newSize); //something like this
在某些情况下这很容易做到,但通常很麻烦。
简单:
vector<int> vect{ 0, 2, 4 };
newSize = 5;
function(vector<double> &vect, int newSize); //=> {0, 1, 2, 3, 4}
硬:
vector<int> vect{ 0, 2, 4 };
newSize = 6;
function(vector<double> &vect, int newSize); //=> ??????????????
在更困难的情况下,我什至不知道仅凭插值就可以解决这个问题,而且不确定是否有一些标准约定可以像这样扩展样本数据。
任何信息或建议都值得赞赏。
答案 0 :(得分:0)
我会尝试类似的方法:
std::vector<double> interpolate(const std::vector<double>& v, const unsigned newSize)
{
assert(!v.empty());
std::vector<double> result(newSize);
const std::size_t oldSize = v.size();
for (unsigned i=0; i < newSize; i++)
{
const unsigned idx = i*(oldSize-1) / newSize;
const unsigned mod = i*(oldSize-1) % newSize;
if (mod == 0)
result[i] = v[idx];
else
{
const double part = double(mod) / double(newSize);
result[i] = v[idx]*(1.0-part) + v[idx+1]*part;
}
}
return result;
}