提高 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
}

我可以改变表达方式来提高性能吗?

答案1

您每次都在重新计算列表长度。还,调整你的表情

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
}

相关内容