Julia中多维数组的最大值与索引

Julia中多维数组的最大值与索引,julia,Julia,我试图在Julia的多维数组中找到该值的最大值和索引。代码如下: temp = 0 final_A = 1 final_B = 1 final_C = 1 final_D = 1 length = 10 function maxis(final, temp, final_A, final_B, final_C, final_D, final) for A in 1:length for B in 1:length for C in 1:length for D in

我试图在Julia的多维数组中找到该值的最大值和索引。代码如下:

temp = 0
final_A = 1
final_B = 1
final_C = 1
final_D = 1
length = 10

function maxis(final, temp, final_A, final_B, final_C, final_D, final)

for A in 1:length
  for B in 1:length
    for C in 1:length
      for D in 1:length

        final[A, B, C, D] = A + B + C + D

        if final[A, B, C, D] > temp
           temp = final[A, B, C, D]
           final_A = A
           final_B = B
           final_C = C
           final_D = D

        end


      end
    end
  end
end

end

谢谢更新:注意,对于Julia v0.7+,
indmax
已被弃用,取而代之的是
argmax
,对于维度大于
1
的数组,
argmax
返回一个
CartesianIndex
。这意味着不再需要再处理
ind2sub
,事实上,由于这个原因,这个函数也被弃用了

原始答案:回答问题的一些示例代码:

julia> x = rand(1:10, 3, 4, 2)
3×4×2 Array{Int64,3}:
[:, :, 1] =
 3  5  3  3
 1  4  9  1
 1  5  9  8

[:, :, 2] =
 2  4  7  3
 1  4  2  4
 5  5  5  5

julia> maximum(x)
9

julia> indmax(x) #returns the linear index
8

julia> ind2sub(x,indmax(x)) #returns the cartesian index as tuple of Int
(2, 3, 1)
这将仅在重复最大值的情况下找到第一个最大值的索引。但是,您发布的示例代码似乎做了同样的事情


另请注意
?如果您经常使用笛卡尔指数,那么笛卡尔指数
可能会非常有用。

更新:注意,对于Julia v0.7+,
indmax
已经被弃用,取而代之的是
argmax
,对于维度大于
1
的数组,
argmax
返回一个
CartesianIndex
。这意味着不再需要再处理
ind2sub
,事实上,由于这个原因,这个函数也被弃用了

原始答案:回答问题的一些示例代码:

julia> x = rand(1:10, 3, 4, 2)
3×4×2 Array{Int64,3}:
[:, :, 1] =
 3  5  3  3
 1  4  9  1
 1  5  9  8

[:, :, 2] =
 2  4  7  3
 1  4  2  4
 5  5  5  5

julia> maximum(x)
9

julia> indmax(x) #returns the linear index
8

julia> ind2sub(x,indmax(x)) #returns the cartesian index as tuple of Int
(2, 3, 1)
这将仅在重复最大值的情况下找到第一个最大值的索引。但是,您发布的示例代码似乎做了同样的事情


另请注意
?如果您经常使用笛卡尔指数,那么笛卡尔指数
可能非常有用。

非常感谢您,但您能用我提供的示例来完成吗?我是新手,我不知道语法,尤其是使用函数/Colin的答案包含您需要的所有信息。例如,如果您不知道Julia语法,那么阅读Julia文档的(写得很好)部分将是一个很好的开始。@Lvassilopoulos您可以使用
findmax
findmax\u multi(x)=let(m,i)=findmax(x)将其组合成一行;m、 ind2sub(x,i)end
。要获取有关函数的更多信息,请打开Julia REPL,然后键入问号。然后提示变为
帮助?>
,您可以输入函数和类型的名称以获取有关其用法的信息。@Lvassilopoulos在StackOverflow上,最好每个问题只解决一个问题。如果你想问一些关于函数语法的问题,那么就开始一个新的问题(尽管按照另一位评论者的建议,最好先阅读一些文档)。对于在多维数组中寻找最大值的索引的问题,我认为我的答案是完整的。如果您同意,请单击我的回答旁边的绿色小勾来标记所回答的问题。非常感谢,但您能用我提供的示例来完成吗?我是新手,我不知道语法,尤其是使用函数/Colin的答案包含您需要的所有信息。例如,如果您不知道Julia语法,那么阅读Julia文档的(写得很好)部分将是一个很好的开始。@Lvassilopoulos您可以使用
findmax
findmax\u multi(x)=let(m,i)=findmax(x)将其组合成一行;m、 ind2sub(x,i)end
。要获取有关函数的更多信息,请打开Julia REPL,然后键入问号。然后提示变为
帮助?>
,您可以输入函数和类型的名称以获取有关其用法的信息。@Lvassilopoulos在StackOverflow上,最好每个问题只解决一个问题。如果你想问一些关于函数语法的问题,那么就开始一个新的问题(尽管按照另一位评论者的建议,最好先阅读一些文档)。对于在多维数组中寻找最大值的索引的问题,我认为我的答案是完整的。如果您同意,请单击我的回答旁边的绿色小勾来标记所回答的问题。