1

私は小さなプログラムを作成していますが、ある時点で行列の各行から行自体の平均を引く必要があります。非常に標準的な繰り込み手順です。

コード内の注意

def subtractaverage(data):
    datanormalized=[]
    for row in data:
        average_row=sum(row)/len(row)
        print "average=",average_row
#       renormalized_row=[cell-average_row for cell in row]
        renormalized_row=[-average_row+cell for cell in row]        
        datanormalized.append(renormalized_row) 
    matrixnormalized=np.array(datanormalized)
    return matrixnormalized

行: # renormalized_row=[行のセルの cell-average_row] renormalized_row=[-average_row+行のセルのセル]

最初に最初の行 (cell-average_row) を試しましたが、うまくいきませんでした。その結果、renormalized_row は行と等しくなりました。

その後、2行目が代わりに機能しました。SOどういうわけか、コンパイラは[行内のセルのセル平均行]を[行内のセルのセル]として解釈しているようです。

しかし、私が書くと:

renormalized_row=[cell-100 for cell in row] 

それは正常に動作します(そして、各セルから値100を引いた新しいリストを生成します。別の小さなプログラムを試してみました:

rs=range(10)
val=5
t=[r-val for r in rs]
print t,rs

これも機能し、生成します

[-5、-4、-3、-2、-1、0、1、2、3、4] [0、1、2、3、4、5、6、7、8、9]

あるべきように。

だから今、私は途方に暮れています。はい、 renormalized_row=[-average_row+cell for cell in row] を使用できますが、何が起こっているのか理解したいと思います。表現が解釈される方法におけるこの明らかな矛盾はなぜですか。

OSX 10.6.4でpython2.6.5を使用しています(2.6.6にはMac用の.dmgがありません)

ありがとう

その日の後半に、別のデータセットでプログラムを試してみると、実際に機能しました。元のデータで再度テストすると、再び機能します。私はさらに混乱しています。しかし、何かが正常に機能していないことを示すための裁判を見逃していることさえ知っています。

この質問を閉じてもよろしいですか

4

1 に答える 1

2

問題は整数除算だと思います(row整数のみで構成されている場合)

average_row=sum(row)/len(row)

行の長さが合計よりも大きい場合、平均は0になります。試す

average_row=sum(row)/float(len(row))

代わりは。

于 2010-09-09T09:35:48.597 に答える