0
t=0
abig= zeros((10000,150))    
aa=[0 for i in range(150)]
print abig[0]

while 1:
    aa=abig[t]

    for k in range(150):

        for i in range(150):         
            ppp=aa[k]+nk[k]*(1-iris[k][3]*aa[i]*iris[i][3]*kk[i][k])
        aa[k]=ppp

        if aa[k]<0:
            aa[k]=0
        if aa[k]>10:
            aa[k]=10
    print abig[0]
    abig[t+1]=aa
    t=t+1
    sds=subtract(abig[t-1],abig[t])
    if norm(sds)<0.0001:
        break
print t 
print aa

私の期待は、それぞれabig[t]をaaに割り当て、aaで計算を行い、aaを割り当ててabig[t+1]、これら2つの減算を取得することです。

しかし、ここに私の結果があります:

"D:\Python27\python.exe" "C:\Users\zlxstc\Desktop\database mining\assignment 3\Untitled 3.py" [ 0.0.0.0.0.0.0.0.0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.]

[ 0.02182929 0.01688619 0.01852881 0.02994012 0.02334267 0.02912904 0.01877934 0.02329373 0.01769912 0.01881822 0.02398082 0.02355713 0.02299379 0.02074258 0.02807412 0.02593361 0.02593361 0.02362391 0.02639219 0.01560549 0.02182929 0.01877934 0.0185701 0.02597403 0.03099814 0.02547771 0.02663825 0.03051572 0.01591343 0.01709986 0.02156567 0.02685285 0.0245459 0.02358491 0.02918856 0.02524615 0.02329373 0.02355713 0.02128565 0.02085941 0.02360718 0.02074258 0.0174703 0.01569859 0.02460025 0.0293772 0.01628399 0.02424242 0.02284148 0.02043736 0.02331002 0.02427184 0.03293808 0.01901864 0.02340824 0.01877934 0.01688619 0.01422677 0.02125399 0.02394063 0.02175332 0.0199005 0.02547771 0.02570694 0.02360718 0.0249004 0.02299908 0.02807412 0.02768549 0.02463054 0.01268231 0.01469508 0.02125399 0.02247191 0.02880184 0.02912904 0.03359086 0.02071251 0.0293772 0.02154708 0.01923077 0.03096934 0.01879699 0.01996008 0.01789229 0.03225806 0.02125399 0.01730703 0.02156567 0.0204165 0.0273224 0.03164557 0.01879699 0.02208481 0.02334267 0.01547988 0.03147624 0.0163292 0.02630887 0.01901864 0.01783167 0.02099958 0.01835199 0.01730703 0.01769912 0.0273224 0.02856327 0.01670844 0.03631082 0.0339098 0.02752546 0.02502503 0.01946661 0.02421894 0.02329373 0.0200441 0.01454334 0.02018978 0.01902226 0.02085941 0.02329373 0.02777778 0.01769912 0.02207993 0.02483855 0.02886003 0.02362391 0.02355713 0.01832845 0.01968504 0.02181025 0.01968504 0.0144655 0.01936483 0.02807412 0.02229654 0.02483855 0.0.02017756 0.01877934 0.02630887 0.01497006 0.01688619 0.02047083 0.01919754 0.0212766 0.02340824 0.02563445 0.01789229 0.02630887 0.013 7.104 ..................2

2つabig[0]は同じではありません。したがって、減算は0です。なんで?kk[]and nk[]and aboveにはいくつかの定義がありiris[]ます。関連性はありますか?

4

1 に答える 1

2

コードにはいくつかの問題があります (変数名の選択は別として)。まず、次のことを行います。

aa=abig[t]

のコピーを作成しませんabig[t]。代わりにaaabig[t]同じデータを参照するので、次のようなことをすると:

aa[1] = 20

その後自動的に

abig[t][1] = 20

一方、割り当ての順序はおそらく間違っています。あなたが望むのは次のとおりだと思います:

abig[t] = aa

配列のようabigに見えるため、メソッドは暗黙的に使用されるため、のコピーです(データを共有しません)。numpycopyabig[t]aa

今やっている:

abig[t][1] = 20

変わりませんaa[1]

次に、コードのこの部分:

for i in range(150):         
    ppp=aa[k]+nk[k]*(1-iris[k][3]*aa[i]*iris[i][3]*kk[i][k])
aa[k]=ppp

以下とまったく同じです:

aa[k]=aa[k]+nk[k]*(1-iris[k][3]*aa[149]*iris[149][3]*kk[149][k])

したがって、ループは役に立ちません。あなたの本当の意味は

for i in range(150):         
    aa[k]=aa[k]+nk[k]*(1-iris[k][3]*aa[i]*iris[i][3]*kk[i][k])

(しかし、完全にはわかりません)。

要約すると、現在の実装aaではabig[t]abig[t+1]すべてが同じデータを参照しているため、連続する行を減算すると、一連のゼロが得られます。

于 2012-10-20T01:26:44.347 に答える