我有一个数组<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="aligned">
<h2 class="iam">I am</h2>
<h2 class="wrapper"><span class="quotes">first quote</span></h2>
</div>
数组,它是整数的A
。我正在尝试使用Julia在N-element Array{Array{Int64,1},1}
中找到最大的数组。
例如:
A
在Python中我只会这样做:A = [[1, 2], [3, 4], [5, 6, 7], [1, 2, 5, 8]]
但在朱莉娅我不知道该怎么做。
我做的是:
max(A, key=len)
谢谢!
答案 0 :(得分:6)
编辑:注意,也值得查看@crstnbr的其他答案
请考虑以下示例代码:
julia> A = [[1,2], [1,2,3,4,5,6], [1,2,3]]
3-element Array{Array{Int64,1},1}:
[1, 2]
[1, 2, 3, 4, 5, 6]
[1, 2, 3]
julia> length(A)
3
julia> length.(A)
3-element Array{Int64,1}:
2
6
3
julia> indmax(length.(A))
2
julia> A[indmax(length.(A))]
6-element Array{Int64,1}:
1
2
3
4
5
6
第一次调用length
会获得A
中外部向量的长度,不是我们想要的内容。在第二个调用中,我使用broadcasting operator .
,以便我得到每个内部向量的长度。在indmax
行中,我找到length.(A)
中最大值的索引,即最长内向量的索引。如果您想要返回最长的内部向量,则只需使用A
行的结果索引到indmax
。
答案 1 :(得分:6)
function findlongest(A)
idx = 0
len = 0
@inbounds for i in 1:length(A)
l = length(A[i])
l > len && (idx = i; len=l)
end
return A[idx]
end
请注意,这个实现(可能)在Python中是个坏主意:)
快速基准:
julia> using BenchmarkTools
julia> A = [[1,2], [1,2,3,4,5,6], [1,2,3]]
3-element Array{Array{Int64,1},1}:
[1, 2]
[1, 2, 3, 4, 5, 6]
[1, 2, 3]
julia> @btime findlongest(A);
26.880 ns (0 allocations: 0 bytes)
julia> @btime A[indmax(length.(A))];
9.813 μs (25 allocations: 1.14 KiB)
对于此示例,这是 ~365倍的加速。
编辑: 更好的基准(评论中建议)
julia> @btime findlongest($A);
9.813 ns (0 allocations: 0 bytes)
julia> @btime $A[indmax(length.($A))];
41.813 ns (1 allocation: 112 bytes)
$
符号可避免设置分配和时间。加速 ~4 。
快速解释
length.(A)
分配一个新的整数数组)a && b
是“if a then b”@inbounds
避免对A[i]
答案 2 :(得分:1)
indmax
不再在Julia中定义(至少1.3)。
改为使用argmax
。
>>> A = [[1,2], [1,2,3]]
2-element Array{Array{Int64,1},1}:
[1, 2]
[1, 2, 3]
>>> length.(A)
2-element Array{Int64,1}:
2
3
>>> argmax(length.(A))
2
>>> A[argmax(length.(A))]
3-element Array{Int64,1}:
1
2
3