julia> function f(n::Int64)
a = collect(1:2:n)
sin.(a .* π/2) .* a
end
f (generic function with 1 method)
julia> @time f(100);
0.000007 seconds (4 allocations: 1.938 KiB)
julia> @time f(20000);
0.000248 seconds (8 allocations: 312.812 KiB)
julia>
【 在 callmebbser (BBSer) 的大作中提到: 】
: 标 题: Re: 如何优雅的生成类似[1,-3,5,-7……]这样的序列
: 发信站: 水木社区 (Sun Jun 14 09:11:43 2020), 站内
:
: 10000 loops of a = np.arange(1, 20000, 2), a = np.sin(a*pi/2)*a:
: 1.8311045169830322 s.
: 10000 loops of a = np.arange(1, 20000, 2), a = np.where(a%4==1, a, -a):
: 1.0180583000183105 s.
: 10000 loops of [i if (i%4==1) else -i for i in range(1, 20000, 2)]:
: 11.047631978988647 s.
: 10000 loops of [-(i*2+1) if (i&1) else (i*2+1) for i in range(10000)]:
: 21.168210744857788 s.
: 10000 loops of [-(i*2+1) if (i%2) else (i*2+1) for i in range(10000)]:
: 19.10609269142151 s.
: 10000 loops of [(-1)**i*(2*i+1) for i in range(10000)]:
: 73.45320105552673 s.
: 10000 loops of [(-1)**(i&1)*(i*2+1) for i in range(10000)]:
: 57.76730442047119 s.
: 10000 loops of [(-1)**(i%2)*(2*i+1) for i in range(10000)]:
: 58.772361278533936 s.
:
: 期待更快的答案出现。
:
: 【 在 callmebbser (BBSer) 的大作中提到: 】
: : 标 题: Re: 如何优雅的生成类似[1,-3,5,-7……]这样的序列
: : 发信站: 水木社区 (Sun Jun 14 08:35:45 2020), 站内
: :
: : 这个目前是最快的。
: :
: :
: : 【 在 Krank (男兒到死心如鐵) 的大作中提到: 】
: : : 标 题: Re: 如何优雅的生成类似[1,-3,5,-7……]这样的序列
: : : 发信站: 水木社区 (Sun Jun 14 04:05:50 2020), 站内
: : :
: : : 你這個用搜索的會慢得令人髮指吧。
: : : 【 在 roy (天上掉大饼:学思行言) 的大作中提到: 】
: : : : 既然用numpy了,可以这样写
: : : : lst=np.arange(1,n+1,2)
: : : : lst2=np.where(lst%4==1,lst,-lst)
: : : : ...................
: : :
: : : --
: : :
: : : ※ 来源:·水木社区 newsmth.net·[FROM: 73.229.62.*]
: :
: :
: : --
: :
: : ※ 来源:·水木社区 newsmth.net·[FROM: 58.23.245.*]
:
:
: --
:
: ※ 来源:·水木社区 newsmth.net·[FROM: 58.23.245.*]
:
--
FROM 123.139.18.*
同一台机器上,
Python:
In [7]: a,b = 99999999999999999999999999999999999999999999999999999999999999
9999999999999999999999999999999999999999999999999999999999999999999999999999
99999999999999999999
...: 9999999999999999999999999999999999999999999999999999,999999
In [8]: from itertools import islice, chain, count
In [9]: %timeit list(islice(chain.from_iterable(zip(count(a, 4), count(-(a+2
), -4))), b//2))
82.8 ms ± 1.89 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
Julia:
julia> function f(b,l)
a = Vector{BigInt}(undef, Int(ceil((l+1)/2)))
p = 1
@inbounds for i = b:4:b+l
a[p] = i
p += 2
end
p = 2
@inbounds for i = -(b+2):-4:-(b+l)
a[p] = i
p += 2
end
a
end
f (generic function with 1 method)
julia> a,b = 999999999999999999999999999999999999999999999999999999999999999
9999999999999999999999999999999999999999999999999999999999999999999999999999
99999999999999999999999999999999999999999999999999999999999999999999999,9999
99;
julia> f(2,2);
julia> BenchmarkTools.@btime f(a, b);
50.668 ms (1500039 allocations: 64.85 MiB)
julia>
-----------------------
换了跟 %timeit 一样多次取样的 @btime 做 benchmark。
Julia 的 BigInt 用的是 GMP, vector里做不到内存连续,优势不像 primitive int
那么大。
【 在 sosei (fss.sosei) 的大作中提到: 】
: 呃呃呃,遇上打不开图的错误啦
: 破水木
: from itertools import islice, chain, count
: ...................
--
FROM 123.139.18.*