0

Stackoverflowに関する別の質問に答えて書かれたこのマルコフ連鎖のジブリッシュ検出器を見たので、PHPに変換したいと思います。これを行う人を探していませんが、Pythonコードの一部について混乱しています。私には知らない。私はPythonのドキュメントを見てきましたが、それは私をさらに混乱させます。

  1. PHPのyieldに相当するものは何ですか?

    def ngram(n, l):
    """ Return all n grams from l after normalizing """
    filtered = normalize(l)
    for start in range(0, len(filtered) - n + 1):
        yield ''.join(filtered[start:start + n])
    
  2. xrangeとは正確には何ですか?PECL拡張機能がありますが、純粋なPHP実装を希望しますか?これは可能でしょうか?

    counts = [[10 for i in xrange(k)] for i in xrange(k)]
    
    for i, row in enumerate(counts):
    s = float(sum(row))
    for j in xrange(len(row)):
        row[j] = math.log(row[j] / s)
    
  3. assertは何をしますか?例外をスローするのと同じですか?

    assert min(good_probs) > max(bad_probs)
    
  4. Python Pickle、それは本質的にシリアル化されていますか?

    pickle.dump({'mat': counts, 'thresh': thresh}, open('gib_model.pki', 'wb'))
    

助けてくれてありがとう。


編集:タイプミス。

4

2 に答える 2

4

1. PHPのyieldに相当するものは何ですか?

yieldPHPに相当するものはありません。yieldジェネレーター関数で使用されます-結果を返すがその状態を保持する特別なクラスの関数。

例えば:

def simple_generator(start=0, end=100):
    while start < end:
        start += 1
        yield start
gen = simple_generator()
gen() # 1
gen() # 2
gen() # 3

あなたは次のようにPHPで同様のことをすることができます:

class simple_generator {
    private $start;
    private $end;
    function __construct($start=0, $end=100) {
        $this->start = $start;
        $this->end = $end;
    }
    function __call() {
        if($this->start < $this->end) {
            $this->start++;
            return $start;
        }
    }
}
gen = simple_generator();
gen(); // 1
gen(); // 2

2. xrangeとは正確には何ですか?

xrangeと同じようrangeに動作しますが、ジェネレーター関数を使用します。これは、非常に大きなリストを操作する場合、またはメモリが不足している場合のパフォーマンスの調整です。

3. assertは何をしますか?スローと例外に相当しますか?

はい。注意してください-それはPHPのものと同じではありません-それはあなたのソフトウェアへの攻撃のためassertの本当に楽しいベクトルです。

4. Python Pickle、それは本質的にシリアル化されていますか?

はい。

于 2011-10-25T07:26:03.110 に答える
1
  1. xrangeはイテレータを返します。これは、リストを返す範囲とは異なります。どちらもほとんど同じように動作するため、範囲を使用するのと同じように使用してください。

  2. はい

  3. はい

于 2011-10-25T07:20:55.507 に答える