gpt4 book ai didi

wolfram-mathematica - Ordering@Ordering 和排名排列

转载 作者:行者123 更新时间:2023-12-04 08:00:12 26 4
gpt4 key购买 nike

正如 nazdrovje 所指出的(参见 here ) Ordering@Ordering 可用于获取列表中每个元素的排名。即使列表包含重复元素,结果也是 n 排列(作为整数 1 到 n 的有序列表,没有重复),其中排名最低的元素被分配 1,第二低的 2 等。正如 Andrzej Kozlowski 指出的,以下成立(另见 here ):

(Sort@mylist)[[Ordering@Ordering@mylist]]==mylist

我想产生一个排名排列,其中排名最高的元素被分配 1,第二高的 2 等,这样以下内容成立:
(Reverse@Sort@mylist)[[newPermutation]]==mylist

这看起来很简单,但我只能想出一个相当尴尬的解决方案。目前我执行以下操作:
newPermutation= Ordering@Ordering[Ordering@Ordering@mylist,All,Greater]

有没有更优雅或更直观的方式?一定有吗?

一个例子:
mylist= {\[Pi],"abc",40,1, 300, 3.2,1};

Ordering@Ordering@mylist

Ordering@Ordering[Ordering@Ordering@mylist,All,Greater]

输出(注意排列之间的相互关系)
{7,6,4,1,5,3,2}
{1,2,4,7,3,5,6}

(以下两个都评估为真)
Sort@mylist)[[Ordering@Ordering@mylist]]== mylist
Reverse@Sort@mylist)[[ Ordering@Ordering[Ordering@Ordering@mylist,All,Greater]]]== mylist

最佳答案

如果你设置

 oldPerm = Ordering@Ordering@mylist

然后
 newPerm = - oldPerm + Length@mylist + 1


(Reverse@Sort@mylist)[[newPerm]]==mylist


True
所以,你可以定义
newPerm[x_] := 1 + Length@x - Ordering@Ordering@x


(Reverse@Sort@mylist)[[newPerm[mylist]]] == mylist  

True

关于wolfram-mathematica - Ordering@Ordering 和排名排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4742772/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com