|
|
1
7
通常只需创建如下结构:
或者,将特征值/特征向量放入
|
|
|
2
2
我在不同的情况下做过很多次。与其对数组进行排序,不如创建一个包含排序索引的新数组。 例如,有一个长度n数组(向量)求值和一个2d nxn数组evects。创建包含值[0,n-1]的新数组索引。 然后,与其将evals作为evals[i]访问,不如将其作为evals[index[i]]访问,而不是evects[i][j],而是evects[index[i]][j]访问。 现在编写排序例程来对索引数组而不是evals数组进行排序,这样就不会像{0,1,2,……,n-1},索引数组中的值将按evals数组中的值的递增顺序排列。 所以在分类之后,如果你这样做:
你会得到一份评估人员的分类名单。 这样,您就可以对与evals数组相关联的任何内容进行排序,而无需实际移动内存。当n变大时,这一点很重要,您不希望在evects矩阵的列周围移动。 基本上,第i个最小的eval将位于索引[i]处,并且对应于索引[i]的evect。 编辑以添加。这是我编写的一个函数STD::排序以执行我刚才所说的:
|
|
|
3
0
解决方案完全依赖于存储特征向量矩阵的方式。
如果您能够实现
这可以用类似于
如果这样做,
|
|
|
4
0
在C++中使用向量和矩阵的方法可能是最好的方法。我在考虑如何在R中做它,看看它是否可以翻译成C++。在r中,很简单,evec<-evec[,order(eval)].不幸的是,我不知道有什么内置的方式来执行C++中的Ord()操作。也许其他人会这样做,在这种情况下,也可以用类似的方式来做。 |