Julia 語言中的生成器表示式與陣列推導式
《Julia 程式設計基礎》第 228 頁:
當然了,程式的好壞肯定不能單憑是否節省記憶體空間來衡量。如果我們觀測程式的執行時間(可以用 @timev 巨集),會發現生成器表示式通常還不如包含了陣列推導式的相應程式碼執行速度快。
我使用以下程式碼進行測試(程式碼中的“生成器表示式”和“陣列推導式”來源於書中同一頁):
function test(n)
println("\n效能測試(n = $(n))")
println("生成器表示式:")
@timev reduce(*, (x for x=1:n))
println("\n陣列推導式:")
@timev reduce(*, [x for x=1:n])
end
println("Julia Version $(VERSION)")
test(10)
test(10^8)
執行結果如下:
$ julia p228.jl
Julia Version 1.5.0
效能測試(n = 10)
生成器表示式:
0.000000 seconds
elapsed time (ns): 62
陣列推導式:
0.000014 seconds (1 allocation: 160 bytes)
elapsed time (ns): 13845
bytes allocated: 160
pool allocs: 1
效能測試(n = 100000000)
生成器表示式:
0.000000 seconds
elapsed time (ns): 50
陣列推導式:
0.335083 seconds (2 allocations: 762.940 MiB, 1.03% gc time)
elapsed time (ns): 335083357
gc time (ns): 3449954
bytes allocated: 800000080
pool allocs: 1
malloc() calls: 1
GC pauses: 1
可見,在上述程式碼中,生成器表示式比包含陣列推導式的相應程式碼執行速度快。
以下程式碼根據這本書的作者郝林老師給出陣列推導式寫成:
println("Julia Version $(VERSION)")
println("生成器表示式:")
@timev map(tuple, (1/(i+j) for i=1:2, j=1:2), [1 3; 2 4])
println("\n陣列推導式:")
@timev map(tuple, [1/(i+j) for i=1:2, j=1:2], [1 3; 2 4])
執行結果:
$ julia p228a.jl
Julia Version 1.5.0
生成器表示式:
0.157070 seconds (587.07 k allocations: 31.358 MiB)
elapsed time (ns): 157069903
bytes allocated: 32880759
pool allocs: 586924
non-pool GC allocs:150
陣列推導式:
0.112933 seconds (344.12 k allocations: 17.103 MiB, 5.04% gc time)
elapsed time (ns): 112932620
gc time (ns): 5686877
bytes allocated: 17934120
pool allocs: 344109
non-pool GC allocs:13
GC pauses: 1
可見,在上述程式碼中,生成器表示式比包含陣列推導式的相應程式碼執行速度慢。
相關文章
- Go 語言中的兩種 slice 表示式Go
- 生成器 推導式 內建函式函式
- 聊聊Go語言中的陣列與切片Go陣列
- 程式語言中表示式更優於語句
- 現代 ABAP 程式語言中的正規表示式
- JavaFX教程-函式、陣列、表示式和操作Java函式陣列
- Python騷操作從列表推導和生成器表示式開始Python
- c語言中陣列的宣告與初始化C語言陣列
- python 生成器 和生成器函式 以及各種推導式Python函式
- Julia的陣列功能陣列
- Python推導式(列表推導式、元組推導式、字典推導式和集合推導式)Python
- 認識 Go 語言中的陣列Go陣列
- 24/9/21 python的推導式、生成器Python
- python生成器和各種推導式Python
- PHP一維陣列轉二維陣列正規表示式PHP陣列
- linux下C語言中的mkdir函式與rmdir函式LinuxC語言函式
- c語言中三維陣列C語言陣列
- Julia位陣列的再探陣列
- 淺析C語言中的setjmp與longjmp函式C語言函式
- C 語言中的 time 函式函式
- C語言中的abort函式C語言函式
- c語言中陣列的三種型別C語言陣列型別
- shell--函式與陣列函式陣列
- CMake 生成器表示式---條件表示式和邏輯運算子
- 陣列排序函式-php陣列函式(一)陣列排序函式PHP
- C語言中qsort函式的用法C語言函式
- Python中表示式與語句Python
- SQL語句與正規表示式SQL
- rex:Golang的正規表示式生成器Golang
- c語言中計算陣列長度的方法C語言陣列
- go語言中遍歷陣列的方法有哪些Go陣列
- Python 進階_生成器 & 生成器表示式Python
- 異常處理與推導式
- Python 3 中生成器函式yield表示式的使用Python函式
- 逆波蘭表示式求值——棧與佇列佇列
- 詳解資料結構中的“陣列”與程式語言中的“陣列”的區別和聯絡資料結構陣列
- Java正規表示式的語法與示例Java
- C++的那些事:表示式與語句C++