Julia中多维数组的最大值与索引
我试图在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
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上,最好每个问题只解决一个问题。如果你想问一些关于函数语法的问题,那么就开始一个新的问题(尽管按照另一位评论者的建议,最好先阅读一些文档)。对于在多维数组中寻找最大值的索引的问题,我认为我的答案是完整的。如果您同意,请单击我的回答旁边的绿色小勾来标记所回答的问题。