您可以在C++中实现类似的功能,但不应该为它使用纯C数组。
我可以看到这项工作的最简单方法是使用浮点数的std::set
(代码看起来像是假设数据按升序排序)。你也可以使用float的std::vector
,但你必须自己排序,可能是使用std::sort
。
在这种情况下,您的示例代码可能如下所示 - 集合假设值是唯一的,如果不是,则可以使用std::multiset
代替;
std::set<float> values(inp.data.begin(), inp.data.end());
std::set<float>::iterator idx1 = values.lower_bound(-2.14);
std::set<float>::iterator idx2 = values.upper_bound(2.0);
float res1 = (*idx1 - diff1)/1000.0;
float res2 = (*idx2 - diff2)/1000.0;
请注意,上面的代码示例是不是你原来的代码100%的转化 - lower_bound
给你那是等于或大于-2.14较大的第一要素。我也没有把任何检查代码放入失败 - 如果lower_bound
或upper_bound
找不到匹配的元素,他们将返回例如values.end()
。
使用矢量的例子看起来非常相似,只是多了一个行预先整理的载体:
std::vector<float> values(inp.data.begin(), inp.data.end());
std::sort(values.begin(), values.end();
std::vector<float>::iterator idx1 = std::lower_bound(values.begin(), values.end(), -2.14);
std::vector<float>::iterator idx2 = std::upper_bound(values.begin(), values.end(), 2.0);
float res1 = (*idx1 - diff1)/1000.0;
float res2 = (*idx2 - diff2)/1000.0;
请解释一下Python代码对于那些对numpy不熟悉的人。 – 2010-03-24 12:33:47
它看起来类似于R. – 2010-03-24 12:54:21
只是延长我有一个更详细的解释 – Linai 2010-03-24 13:39:48