您可以在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