在 Julia 中返回数组中的最小索引

Posted

技术标签:

【中文标题】在 Julia 中返回数组中的最小索引【英文标题】:Returning a minimum index in an array in Julia 【发布时间】:2018-09-30 04:49:13 【问题描述】:

我正在将一些代码从 Matlab 转换为 Julia。 matlab代码中:

[~,pStar] = min(min([dPlus,dMinus],[],2))

会返回每一行的最小元素并以列的形式输出,然后返回该列中最小元素的索引(行),就像:

>> M = [1,1,1;1,1,0;1,1,1]
M =
   1   1   1
   1   1   0
   1   1   1
>> min(M,[],2)
ans =
   1
   0
   1
>> [~,row] = min(min(M,[],2))
row =  2

我的问题是:Julia 相当于什么?谢谢

【问题讨论】:

【参考方案1】:

indmin 返回最小值的线性索引。您可以使用ind2sub 将其转换为下标形式,并从中提取行:

julia> indmin(M)
8

julia> row, col = ind2sub(M, indmin(M))
(2, 3)

julia> row
2

这种方法避免了两次迭代和创建中间数组。

更新:在 Julia >= 0.7 中,这已更改为 argmin,返回一个您可以直接使用的 CartesianIndex。您还可以使用findmin 来获取最小值及其索引。

【讨论】:

很高兴我能帮上忙。请阅读this;如果您找到的答案实际上令人满意地解决了您的问题,您可以使用一个复选标记将其标记为“已接受”。 当然,我收到“无效理解”错误。我真的需要你看看其余的代码。 Julia 的调试非常模糊,我完全不知道它可能来自哪里。我正在使用 for 循环来进行实验的迭代。不知道。【参考方案2】:

一种方法是

julia> M = [1 1 1;1 1 0;1 1 1]
3×3 ArrayInt64,2:
 1  1  1
 1  1  0
 1  1  1

julia> indmin(minimum(M, 2))
2

minimum(X, dim) 沿着维度 dim 找到最小值。

indmin(X) 返回最小值的索引。

更快的方法是

ind2sub(M, indmin(M))[1]

【讨论】:

以上是关于在 Julia 中返回数组中的最小索引的主要内容,如果未能解决你的问题,请参考以下文章

找出元素在排序后数组中的索引

在javascript中的数组中查找多个最小值的索引

使用numpy选择排除某些索引的数组中最小值的索引

强制数组中的条目为 julia 中的整数

旋转数组中的元素查找

Julia:数组是不是包含特定的子数组