在 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
来获取最小值及其索引。
我正在将一些代码从 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
来获取最小值及其索引。