Tcl

提高 tcl 中數值循環的性能

  • February 11, 2015

我正在嘗試提高 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
}

引用自:https://unix.stackexchange.com/questions/184303