biraz daha hızlı yerine map
uygulayarak daha Array{UInt8, ndims(x)}(x)
olarak anında UInt8
için kopya dizi etmektir edilir Başka bir seçenek:
>>> x = bitrand(100,100)
>>> a = map(UInt8, x)
>>> b = Array{UInt8, ndims(x)}(x)
>>> all(a .== b)
true
Ben çabuk bazı testler yaptım ve göze hitap eden daha hızlı büyüktür matrisler (en azından bilgisayarımda).
for i in [10, 100, 1_000, 10_000]
x = bitrand(i,i)
println("$i x $i")
@time map(UInt8, x)
@time Array{UInt8, ndims(x)}(x)
end
Çıkışlar:
10 x 10
0.000002 seconds (2 allocations: 208 bytes)
0.000006 seconds (2 allocations: 208 bytes)
100 x 100
0.000053 seconds (2 allocations: 9.891 KB)
0.000018 seconds (2 allocations: 9.891 KB)
1000 x 1000
0.001945 seconds (5 allocations: 976.703 KB)
0.001490 seconds (5 allocations: 976.703 KB)
10000 x 10000
0.224491 seconds (5 allocations: 95.368 MB)
0.117774 seconds (5 allocations: 95.368 MB)
'1 * x' 'i deneyin, sayısal sürüme sahip olur (belki de süper bellek/zaman açısından verimli değil, ancak" büyük veri "olmayan şeyler için yeterince iyi). 0x1 * x' bir UInt8 daha fazla bellek kompakt (ama muhtemelen daha yavaş) alacaktır. –
@DanGetz Bunu bir cevap olarak göndermelisiniz. Bu en basit çözüm. – becko