gpt4 book ai didi

wolfram-mathematica - Mathematica 中复杂矩阵的最大函数

转载 作者:行者123 更新时间:2023-12-02 04:55:33 25 4
gpt4 key购买 nike

我想逐个元素比较矩阵并找到矩阵的最大值,就像我有三个 3x3 矩阵

tdata = {{{1, 5, 1}, {7, 4, 2}, {2, 4, 3}}, {{2, 0, 8}, {9, 8, 2}, {2,
3, 0}}, {{2, 2, 9}, {10, 9, 5}, {9, 3, 3}}}

然后通过使用

MapThread[Max, tdata, 2] // MatrixForm

我能得到正确的结果。

{{2, 5, 9}, {10, 9, 5}, {9, 4, 3}}

但是,当矩阵是复数矩阵时,Max 函数不起作用。例如,

tdata = {{{0.323031 + 5.23687 I, 8.92856 + 1.31365 I},
{9.94387 + 3.04104 I, 8.72483 + 2.5648 I}},
{{5.96575 + 9.2521 I, 8.58461 + 2.56753 I},
{0.902715 + 3.75791 I, 4.06809 + 8.61552 I}},
{{9.36592 + 1.17263 I, 9.74628 + 2.22183 I},
{4.61866 + 4.61158 I, 9.0791 + 2.50036 I}}}

我曾尝试为复杂矩阵实现一个新的 Max 函数,但它不起作用。这是一个演示,

complexMax[lis_] := Module[{abs = Abs[lis]}, Take[lis, Position[abs, Max[abs]][[1]]]]

然后

MapThread[complexMax, tdata, 2]

结果是这样的

{{complexMax[0.323031 + 5.23687 I, 5.96575 + 9.2521 I, 9.36592 + 1.17263 I], 
complexMax[8.92856 + 1.31365 I, 8.58461 + 2.56753 I, 9.74628 + 2.22183 I]},
{complexMax[9.94387 + 3.04104 I, 0.902715 + 3.75791 I, 4.61866 + 4.61158 I],
complexMax[8.72483 + 2.5648 I, 4.06809 + 8.61552 I, 9.0791 + 2.50036 I]}}

有什么办法解决这个问题吗?

最佳答案

我想这就是你想要的:

MapThread[Last@SortBy[{##}, Abs] &, tdata, 2] // MatrixForm

(* {{5.96575 + 9.2521 I, 9.74628 + 2.22183 I}, {9.94387 + 3.04104 I, 4.06809 + 8.61552 我}} *)

FWIW 这按规范顺序对复数进行排序,(实部在前)

MapThread[Last@Sort[{##}] &, tdata, 2] // MatrixForm

(* {{9.36592 + 1.17263 I, 9.74628 + 2.22183 I}, {9.94387 + 3.04104 I, 9.0791 + 2.50036 我}} *)

请注意,如果您这样做,您的方法同样有效:

 MapThread[complexMax[{##}] &, tdata, 2]

诀窍是 Mapthread 传递给您的函数的参数是一个序列,而不是一个列表。

关于wolfram-mathematica - Mathematica 中复杂矩阵的最大函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18060026/

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