【问题标题】:Column of the max for each row in a matrix矩阵中每一行的最大值列
【发布时间】:2015-07-30 16:48:43
【问题描述】:

考虑矩阵:

M = [1.0 2.0 3.0; 5.0 4.0 3.0; 1.0 100.0 12.0]

我想获取每行中最大值的列。 所以应该是:

col = [3; 1; 2] 

,因为

M[1,3] -> 3.0;
M[2,1] -> 5.0;
M[3,2] -> 100.00;

在 Octave 中很容易实现:

[max, col] = max(M,[],2)

,其中 col=[3;2;1]。

在 Julia 中,我只能找到 findmax 函数,它返回每行最大元素的绝对索引。 所以它会是:

max, aindx = findmax(M,2)

,其中 aindx=[7,2,6]

M[7] = 3.0; M[2] = 5.0; M[6] = 100;

在哪里可以找到 Octave max(M,[],2) 等效的 Julia?

我目前的解决方法:

max, aindx = findmax(M, 2);
msize=size(M);
col = zeros(msize[1], 1);
for i=1:msize[1] 
  _, col[i] = ind2sub(msize,aindx[i]);
end

【问题讨论】:

    标签: julia


    【解决方案1】:

    Julia 的 findmax 比 Octave 的 max 更灵活:您可以一次找到多个维度的最大值。因此,它返回一个线性索引。

    正如您所指出的,您可以使用ind2sub 来计算您想要的任何索引。如果您经常使用它,您可能希望将“解决方法”定义为一个函数以方便使用。如果您想确保它始终可用,可以将该功能放在您的 .juliarc.jl 中。

    【讨论】:

    • 谢谢@tholy。我会听从您的建议,并将代码放入 .juliarc.jl。我假设,我的代码并没有那么糟糕,你会或多或少地做同样的事情。
    • 我认为 Octave max(M,[],2) 没有等效项(我所期望的),我将您的回答视为解决方案。
    猜你喜欢
    • 1970-01-01
    • 2016-07-09
    • 2013-07-31
    • 1970-01-01
    • 2017-07-25
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    • 2014-04-06
    相关资源
    最近更新 更多