2017-10-21 8 views
1

これは私の現在のコードです:私はこのエラーを取得していどのように関数の変数をPythonでループすることができますか?

import numpy as np 

vec0 = [1, 2, 3] 
vec1 = [2, 3, 4] 
vec2 = [3, 4, 5] 
vec3 = [4, 5, 6] 

for k in range(0, 4): 
    globals()['mean%s' % k] = np.mean('vec'+str(k)) 

TypeError: cannot perform reduce with flexible type


私はこの結果にしたいです。

mean0 = np.mean(vec0) 
mean1 = np.mean(vec1) 
mean2 = np.mean(vec2) 
mean3 = np.mean(vec3) 
+0

1)あなたは、動的に名前の変数やあなたが適切numpyのを使用している場合2)、することができますを作成することにしたくありませんそれを1つの2D配列にして、行軸に平均をとります。 –

+0

これは実際には反パターンです。通常、名前で変数を呼び出すのは悪い設計です。 –

答えて

1

あなたがこれを行うことができます:あなたが使用して手段を計算するための容易になりますこれは、このアプローチを避け、代わりに2D Arrayを維持する必要があり、が

globals()['mean%s' % k] = np.mean(vecs[k]) 

vecs = [vec0, vec1, vec2, vec3] 

、その後に行軸私は何を意味

は、これに代えて、次のとおりです。

vec0 = [1, 2, 3] 
vec1 = [2, 3, 4] 
vec2 = [3, 4, 5] 
vec3 = [4, 5, 6] 

あなたはこのような何か持つことができます。

vecs = np.array([[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6]]) 

をして、あなたは、単にこのような手段を計算することができます

meansArray = vecs.mean(axis=1) 

あなたのmean0, mean1, mean2, mean3はそれぞれのインデックスになります。

+0

そして、 '手段= vecs.mean(軸= 1)' ... –

+0

ありがとう、編集中でした。 –

1

変数と呼ぶ反パターンです。複数のオブジェクトに対してタスクを実行する必要がある場合は、これらのオブジェクトのコレクション(タプル、リストなど)を作成できます。例えば:

all_vecs = [vec0, vec1, vec2, vec3] 

さらに、あなたは簡単にaxisパラメータを指定することでnumpyのとバルクにおける平均値を処理することができます。その後、

all_means = np.mean(all_vecs,axis=1) 

>>> all_means 
array([ 2., 3., 4., 5.]) 
1

あなたはそれを行うことができます変更することによって:

globals()['mean%s' % k] = np.mean('vec'+str(k)) 

globals()['mean%s' % k] = np.mean(globals()['vec%s' % k]) 

から

しかし、私は非常代わりにベクトルを使用することをお勧め:

all_vec = [vec0, vec1, vec2, vec3] 
関連する問題