5

Python を使用する本からアプリオリ機械学習アルゴリズムを学習しようとしていますが、その学習の一環として、現在、次の問題に悩まされています。

次のコード構成は正常に機能するようです。

Ck = [[1], [2], [3], [4], [5]]
    for tranid in range(10): 
        for candidate in Ck:
            print("Printing candidate value: ", candidate)

ただし、次の場合は機能しません。

Ck = [[1], [2], [3], [4], [5]]
Ck2 = map(frozenset, Ck)
    for tranid in range(10): 
        for candidate in Ck2:
            print("Printing candidate value: ", candidate)

元の iterable のすべての要素をfrozensetにマップすると、内側のループ( 「Ck2の候補」 )が1回しか実行されないことに気付きました。その後、実行されることはありません。上記のコードは、frozenset を使用せずに、内側のループを 10 回ループします。ただし、frozenset をマップすると、内側のループを 1 回だけ実行できます。

これを修正するのを手伝ってください。この本では、アルゴリズムの目的で変更可能にしたくないため、反復可能な値をfrozensetにマップしています。そのまま従おうとしているだけです。

Anaconda (Spyder) で Python 3.5.1 を使用しています。

私はPythonと機械学習の両方が初めてなので、助けてください。

よろしくお願いします、マヘシュ。

4

2 に答える 2

5

map 演算子は、繰り返し反復できる python3 のリストではなく、一度だけ反復可能な反復子を返します。python3.x では、python2.xmapと同様に動作します。itertools.imap

この問題を解決するには、使用します

 Ck2=list(map(frozenset, Ck)))

詳細およびその他の解決策については、Python 3.x でリストを返すための map() の取得を参照してください。

于 2016-02-11T10:14:05.053 に答える
0

python2.x では、map関数はリストを返します。python3.xmap関数では、反復可能なオブジェクトである map オブジェクトを返します。まさにイテレータ。内側のループを 1 回実行するforと、イテレータが終了するため、イテレータから値を取得できなくなります。Python 2.x では、リストから何度でも値を取得できます。

次のように修正する必要があります。

Ck = [[1], [2], [3], [4], [5]]
for tranid in range(10): 
    Ck2 = map(frozenset, Ck)
    for candidate in Ck2:
        print("Printing candidate value: ", candidate)
于 2016-02-11T10:27:10.547 に答える