关于matlab:在Julia中返回数组中的最小索引

Returning a minimum index in an array in Julia

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
>> 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

我的问题是:朱莉娅相当于什么? 谢谢


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

1
2
3
4
5
6
7
8
julia> indmin(M)
8

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

julia> row
2

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

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


一种方法是

1
2
3
4
5
6
7
8
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)返回最小值的索引。

一种更快的方式

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