Julia 朱莉娅推在尝试收集数据时不是正确的命令
每当我需要在数组“外部”函数中收集数据时,我都在与Julia斗争 如果我使用Julia 朱莉娅推在尝试收集数据时不是正确的命令,julia,Julia,每当我需要在数组“外部”函数中收集数据时,我都在与Julia斗争 如果我使用推!(元素,数组)我可以在数组中收集数据,但是如果代码在循环中,那么数组每次都会“增长” 你推荐什么 我知道这是很基本的:)但是谢谢你 我假设您不想使用push的原因是因为您以前使用过Matlab,这类操作非常慢(准确地说,这是一个O(n^2)操作,因此运行时间翻倍n是原来的四倍)。这不是朱莉娅的推送,因为推使用所描述的算法,该算法仅为O(n)(因此,加倍n只会加倍运行时间) 你可以很容易地通过实验来检验这一点。在Mat
推!(元素,数组)
我可以在数组中收集数据,但是如果代码在循环中,那么数组每次都会“增长”
你推荐什么
我知道这是很基本的:)但是谢谢你 我假设您不想使用
push的原因
是因为您以前使用过Matlab,这类操作非常慢(准确地说,这是一个O(n^2)
操作,因此运行时间翻倍n
是原来的四倍)。这不是朱莉娅的推送代码>,因为推
使用所描述的算法,该算法仅为O(n)
(因此,加倍n
只会加倍运行时间)
你可以很容易地通过实验来检验这一点。在Matlab中,我们有
>> n = 100000; tic; a = []; for i = 1:n; a = [a;0]; end; toc
Elapsed time is 2.206152 seconds.
>> n = 200000; tic; a = []; for i = 1:n; a = [a;0]; end; toc
Elapsed time is 8.301130 seconds.
因此,对于两倍大小的n
,运行时确实是原来的四倍。相反,在朱莉娅身上我们有
julia> using BenchmarkTools
function myzeros(n)
a = Vector{Int}()
for i = 1:n
push!(a,0)
end
return a
end
@btime myzeros(100_000);
@btime myzeros(200_000);
486.054 μs (17 allocations: 2.00 MiB)
953.982 μs (18 allocations: 3.00 MiB)
因此,实际上,对于大小为两倍的n
,运行时只会加倍
长话短说:如果您知道最终数组的大小,那么预分配数组总是最好的(即使在Julia中)。但是,如果您不知道最终的数组大小,那么可以使用
push代码>而不会损失太多性能 嗨,欢迎!我不清楚你到底想做什么<代码>推代码>在末尾追加一个元素,这就是为什么您看到它会增长。