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

Returning a minimum index in an array in Julia

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

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

将return每行中的最小元素以列的形式输出,然后return列中最小元素的索引(行)如:

>> 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 相当于什么?谢谢

一种方法是

julia> M = [1 1 1;1 1 0;1 1 1]
3×3 Array{Int64,2}:
 1  1  1
 1  1  0
 1  1  1

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

minimum(X, dim) 找到维度 dim 上的最小值。

indmin(X) returns 索引的最小值。

更快的方法是

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

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

julia> indmin(M)
8

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

julia> row
2

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

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