Tcl
提高 tcl 中數值循環的性能
我正在嘗試提高 Tcl 腳本的性能。它是一個帶有替換算法的簡單隨機樣本。我知道最好用更面向數字的語言來做這件事,但我所在的平台使用 Tcl。
這是我生成的程式碼,但速度相對較慢。對於大約 100,000 個雙精度值的輸入列表,每個循環大約需要 1 秒。我必須處理這個循環數百次。
proc pSampleWithReplace {list samplesize} { set v_val {} for {set j 0} {$j < $samplesize} {incr j} { lappend v_val [lindex $list [expr round(rand() * [expr [llength $list] -1])]] } return $v_val }
我可以在表達式中更改一些可以提高性能的東西嗎?
您每次都在重新計算列表長度。另外,支撐你的表達。
proc pSampleWithReplace {list samplesize} { set v_val [list] ;# you know it's a list, so create it as a list set lmax [expr {[llength $list] - 1}] for {set j 0} {$j < $samplesize} {incr j} { lappend v_val [lindex $list [expr {round(rand() * $lmax)}]] } return $v_val }