使用C++,希望是标准库,我想按升序对一系列样本进行排序,但我还想记住新样本的原始索引.
例如,我有一个集合,矢量或样本矩阵A : [5, 2, 1, 4, 3].我想对这些进行排序 B : [1,2,3,4,5],但我也想记住值的原始索引,所以我可以得到另一个集合:
C : [2, 1, 4, 3, 0 ]- 它对应于'B'中每个元素的索引,在原始'一个'.
例如,在Matlab中你可以这样做:
[a,b]=sort([5, 8, 7])
a = 5 7 8
b = 1 3 2
Run Code Online (Sandbox Code Playgroud)
任何人都可以看到这样做的好方法吗?
我想重新排序向量中的项目,使用另一个向量来指定顺序:
char A[] = { 'a', 'b', 'c' };
size_t ORDER[] = { 1, 0, 2 };
vector<char> vA(A, A + sizeof(A) / sizeof(*A));
vector<size_t> vOrder(ORDER, ORDER + sizeof(ORDER) / sizeof(*ORDER));
reorder_naive(vA, vOrder);
// A is now { 'b', 'a', 'c' }
Run Code Online (Sandbox Code Playgroud)
以下是一个低效的实现,需要复制向量:
void reorder_naive(vector<char>& vA, const vector<size_t>& vOrder)
{
assert(vA.size() == vOrder.size());
vector vCopy = vA; // Can we avoid this?
for(int i = 0; i < vOrder.size(); ++i)
vA[i] = vCopy[ vOrder[i] ];
}
Run Code Online (Sandbox Code Playgroud)
有没有更有效的方法,例如,使用swap()?
有没有办法使用numpy.percentile函数来计算加权百分位数?或者是否有人知道替代python函数来计算加权百分位数?
谢谢!