arrays - 使用 Mathematica 在具有相同长度的 N 个列表中找到最大列表的任何有效简单方法?

标签 arrays list wolfram-mathematica mathematica-8

这个问题是上一个线程的延续,用于比较具有相同长度的两个列表:

Is there any efficient easy way to compare two lists with the same length with Mathematica?

给定两个列表 A={a1,a2,a3,...an}B={b1,b2,b3,...bn},当且仅当所有 ai>=bi 时,我会说 A>=B。现在我们有 k 个列表 H={{a11,a12,a13,...a1n}, {a21,a22,a23,...a2n},...,{ak1 ,ak2,ak3,...akn}},如果存在,想找到最大的。

这是我的代码:

Do[If[NonNegative[Min[H[[i]] - h]], h = H[[i]], ## &[]], {i, h = H[[1 ]]; 1、长度[H]}];h

有什么更好的技巧吗?

编辑:

我想将其定义为如下函数:

maxList[H_]:=Do[If[NonNegative[Min[H[[i]] - h]], h = H[[i]], ## &[]], {i, h = H[[1]]; 1、长度[H]}];h

但问题是上面的代码跨了两行,有什么办法解决这个问题吗?这是一些可以工作但不是那么漂亮的代码

maxList[H_] := Module[{h = H[[1]]}, Do[If[NonNegative[Min[H[[i]] - h]], h = H[[i ]], ## &[]], {i, 长度[H]}]; h]

maxList[H_]:=Last[Table[If[NonNegative[Min[H[[i]] - h]], h = H[[i]], ## &[]], { i, h = H[[1]]; 1、长度[H]}]]

最佳答案

在我看来,这应该可行:

maxList = # \[Intersection] {Max /@ Transpose@#} &;

maxList[ {{4, 5, 6}, {1, 4, 3}, {4, 3, 5}, {5, 6, 7}} ]
{{5, 6, 7}}

我没有考虑使用 Intersection 的成本,Artes 表明 MemberQ 是一个更好的选择。 (请像我一样投票给他的答案)。我自己会在不使用 Module 的情况下编写函数:

maxList[a_] := If[MemberQ[a, #], #, {}] &[Max /@ Transpose@a]

一个几乎等价但不是相当的快速方法是这样的:

maxList = Cases[#, Max /@ Transpose@# , 1, 1] &;

结果的格式为 {{a, b, c}}{} 而不是 {a, b, c}{}

关于arrays - 使用 Mathematica 在具有相同长度的 N 个列表中找到最大列表的任何有效简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8889583/

相关文章:

python - 在预定义的位置将一个列表中的值插入到另一个列表中

php - 组合框未更新

用案例选择

wolfram-mathematica - Interpolation 的 InterpolationOrder 选项的奇怪行为

arrays - 复制go slices键值

javascript - 从数组中删除一个对象

css - 大小相等的列表项

wolfram-mathematica - 在 Mathematica 中对数字列表进行平方

arrays - 使用速度 split() 将字符串拆分为数组似乎不起作用

javascript - 检查数组的更好方法