C++数组操作(PythOnnad操作)

2024-04-24 20:36:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用Python的方式找出数组操作的最佳C++库/包。基本上我需要这样的简单:

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中的P>只是5行,但是C++中最简单的方法是很多嵌套循环。请告知。。在

基本上,我的问题是关于数组/向量运算,如数组乘法、索引运算等。。在上面的例子中,res1是一个数组,包含从values数组中筛选出的一组元素以及随后应用的一些算法(所有选定元素的减法、乘法)。在这个python示例中,我没有复制values数组的元素,因为它在内存方面可能足够大,我只保留索引,并希望能够在原始数组的选定元素集上运行算术运算。在


Tags: numpy元素data方式数组wherearrayvalues
3条回答
<>你可以在C++中实现类似的东西,但是你不应该使用纯C数组。在

我可以看到这项工作的最简单的方法是使用一个std::set的浮动(您的代码看起来像是假设数据是按升序排序的)。您也可以使用一个std::vector的float,但您必须自己排序,可能是使用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或{}找不到匹配的元素,它们将返回values.end()。在

使用vector,示例看起来非常相似,只需多出一行即可对向量进行预排序:

^{pr2}$

我建议你检查一下算法头。 也不要使用数组,你有std::vector或boost(即将成为std)::array。在

wikipedia article

Reference for all algorithms

你根本不应该使用数组。请坐下来学习std::vector类以及迭代器和标准库算法。我强烈建议你读这本书。在

相关问题 更多 >