C++ 数组操作(类似 Python 的操作)
我正在寻找一个适合在C++中进行数组操作的库或工具,希望它能像Python那样简单。基本上,我需要的简单程度是这样的:
values = numpy.array(inp.data)
idx1 = numpy.where(values > -2.14)
idx2 = numpy.where(values < 2.0)
res1 = (values[idx1] - diff1)/1000
res2 = (values[idx2] - diff2)*1000
在Python中,这只需要5行代码,但在C++中,我想到的最简单方法却是很多嵌套的循环。请给我一些建议。
我的问题主要是关于数组或向量的操作,比如数组的乘法、对索引的操作等等。在上面的例子中,res1是一个数组,它包含了一些从values数组中筛选出来的元素,并且在此基础上进行了某些数学运算(比如减法和乘法,针对所有选中的元素)。在这个Python的例子中,我并没有复制values数组中的元素,因为它可能会占用很多内存,我只保留了索引,并希望能够对原始数组中选定的一组元素进行数学运算。
5 个回答
5
在C++中,你可以实现类似的功能,但最好不要使用普通的C数组。
我觉得最简单的方法是使用一个std::set
来存储浮点数(你的代码看起来是默认数据是按升序排列的)。你也可以使用std::vector
来存放浮点数,但你需要自己排序,可能需要用到std::sort
。
在这种情况下,你的示例代码可能会像这样——使用set的话,假设这些值是唯一的,如果不是,你可以用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()
,比如说。
如果使用vector,示例看起来会非常相似,只是多了一行代码来预先排序这个vector:
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;
5
你根本不应该使用数组。请花点时间好好学习一下std::vector类,还有迭代器和标准库的算法。我强烈建议你读一下这本书:C++标准库。