mathematica排序问题
mathematica吧
全部回复
仅看楼主
level 1
爱_好难ai 楼主
请教大神们,mathematica里面的Sort命令,根据实部排序,如果相等,则根据虚部的绝对值排序。
1.请问如果需要虚部也是根据大小排序,请问怎么办?
2.列表1按照Sort命令排完序后,如果列表2需要按照列表1的顺序进行排列,请问怎么处理?(Ordering与Sort效果一样)
例如:a={-5, -.5 I, .5 I, -.4 I, .4 I, -2 - I, -2 + I, -1 - I, -1 + I, 1 - I, 1 + I, 2 - I, 2 + I, 5},需要按照实部大小先进行排列,如果实部为0,需要按照虚部大小排列,想得到的效果是a1={-5, -2 - I, -2 + I, -1 - I, -1 + I, -.5 I, -.4 I, .4 I,.5 I,1 - I, 1 + I, 2 - I, 2 + I, 5}。
b列表需要按照a列表的顺序进行对应排序。
2020年06月14日 13点06分 1
level 7
额,第一个问题,在sort的帮助里,有写sort其实可以用自己定义的Boolean函数来排序,我是你的话,先把所有的虚数用Re和Im化成只有两个数字的列表,然后只比较列表的第二项。帮助文档里有些
第二个问题和第一个问题类似,不过比较的条件需要自己写,代码我放楼下了
2020年06月14日 15点06分 2
level 7
compi[{a_, b_}, {c_, d_}] :=
Which[
a < c, True,
a == c, If[b < d, True, False],
a > c, False
]
a = {-5, -.5 I, .5 I, -.4 I, .4 I, -2 - I, -2 + I, -1 - I, -1 + I,
1 - I, 1 + I, 2 - I, 2 + I, 5};
t = Cases[a, a_ :> {Re[a], Im[a]}];
Cases[Sort[t, compi[
#1, #
2] &], {a_, b_} :> a + b*I]
2020年06月14日 15点06分 3
谢谢大神,我这就试试
2020年06月15日 17点06分
吧务
level 10
你要的是SortBy[ReIm]
2020年06月16日 08点06分 4
吧务
level 15
我比较惊讶的是你都意识到可以用Ordering了居然还没注意到其实可以
a[[Ordering@ReIm@a]]
2020年07月04日 03点07分 5
1