2017-07-07 20 views
-2

私は行列から列を取り出して、異なる増分で列を平均化する配列を作成しようとしています。私は私の問題を示すサンプルコードを書いています。pythonで行列全体を印刷するには?

import numpy 
import numpy as np 
import matplotlib.pyplot as plt 

numint = 2 
numflo = 2.0 

a = numpy.matrix ([[1,2,3],[4,5,6],[7,8,9,],[10,11,12],[13,14,15],[16,17,18]]) 

b= a[-2*3:,1] 

for i in range (0,numint+1,1): 
    avg = sum(b[numint*i:numint*(i+1)])/numflo 
    print avg 

私はこのコードを実行すると、ループ内で私は、次の

[[ 3.5]] 
[[ 9.5]] 
[[ 15.5]] 

を得るavgを、私は印刷するが、私は、ループの平均外を印刷する場合、私はちょうど

[[15.5]] 

を取得これは、私のコードの残りの部分をスローします。なぜそれは行列全体を印刷せず、最後の数値だけを出力しますか?どんな助けでも感謝しています!

+0

繰り返しごとにループが実行され、平均値が更新されます。端末上に表示されているのは、行列の中間平均です –

+0

これでループは以前の平均値を上書きしないで、代わりに3つの平均値を持つ配列を作成します。ありがとうございます。 –

答えて

1

これは、お客様のfor loopでは、平均した最後の列の平均値に常にavgを更新しているためです。つまり
、あなたは美しい1つのライナーとして、このような何かを行うことができます全体の平均値を持つようにしたい場合:

avg = [sum(b[numint*i:numint*(i+1)])/numflo for i in range(0,numint+1,1)] 

あなたは、単に通常avg[0]などのようなあなたの値にアクセスすることができます。..

+1

ありがとうございます。 –

1

お試しください

avg_list = [] 
for i in range (0,numint+1,1): 
    avg = sum(b[numint*i:numint*(i+1)])/numflo 
    avg_list.append(avg) 

print (avg_list) 
+0

ありがとうございます。 –

関連する問題