tclの数値ループ性能の向上

tclの数値ループ性能の向上

Tclスクリプトのパフォーマンスを向上させようとしています。代替アルゴリズムを使用した単純なランダムなサンプルです。私はこれがより数値指向の言語を使用するのが最善であることを知っていますが、私が使用しているプラ​​ットフォームはTclを使用します。

以下は私が生成したコードですが、比較的遅いです。約100,000個のdouble値からなる入力リストの場合、各ループに約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
}

関連情報