2017-04-24 5 views
1

私はPythonにはとても新しいので、私に同行してください。私はいくつかの物理量を計算するプログラムを書いています。それをAと呼んでいます。Aはいくつかの変数の関数です。それらをx、y、zと呼ぶことにしましょう。私は私が興味を持ってX、Y、Zの値について計算するために、3つのネストされたループを有する。今ベクトルの多次元リストを作成する

for x in xs: 
for y in ys: 
    for z in zs: 
    A[x, y, z] = function_calculating_value(x,y,z) 

ので、問題が[X、Y、Zは二次元アレイであることですA [x、y、z] = [平均、分散]となるように、平均値と分散の両方を含む。他の言語からは、np.zeros()と同様の関数を使ってAを初期化するのに慣れています。ここではどうしたらいいですか?与えられた(x、y、z)に対して平均と分散に簡単にアクセスするにはどうすればいいですか?

は、(最終的な目標は、エラーバーとして分散して平均値をプロットすることができることですので、これを行うための、よりエレガントな方法がある場合、私はそれにも感謝)事前に

感謝を!

+0

* *正確に*あなたは何を使っていますか? Pythonには "vector"と呼ばれるビルトイン型はありません。あなたは 'リスト'を意味しますか?または、あなたは 'numpy'と言いました、あなたは' numpy'データ構造を意味しますか? 'A [x、y、z]'は、* 3次元配列を意味します。 –

答えて

1

あなたはまた、配列をスライスして、別々の手段や分散値のみを取得することができますnumpyの

# Generate a random 4d array that has nx = 3, ny = 3, and nz = 3, with each 3D point having 2 values 
mdarray = np.random.random(size = (3,3,3,2)) 

# The overall shape of the 4d array 
mdarray 
Out[66]: 
array([[[[ 0.80091246, 0.28476668], 
     [ 0.94264747, 0.27247111], 
     [ 0.64503087, 0.13722768]], 

     [[ 0.21371798, 0.41006764], 
     [ 0.79783723, 0.02537987], 
     [ 0.80658387, 0.43464532]], 

     [[ 0.04566927, 0.74836831], 
     [ 0.8280196 , 0.90288647], 
     [ 0.59271082, 0.65910184]]], 


     [[[ 0.82533798, 0.29075978], 
     [ 0.76496127, 0.1308289 ], 
     [ 0.22767752, 0.01865939]], 

     [[ 0.76849458, 0.7934015 ], 
     [ 0.93313128, 0.88436557], 
     [ 0.06897508, 0.00307739]], 

     [[ 0.15975812, 0.00792386], 
     [ 0.40292818, 0.21209199], 
     [ 0.48805502, 0.71974702]]], 


     [[[ 0.66522525, 0.49797465], 
     [ 0.29369336, 0.68743839], 
     [ 0.46411967, 0.69547356]], 

     [[ 0.50339875, 0.66423777], 
     [ 0.80520751, 0.88115054], 
     [ 0.08296022, 0.69467829]], 

     [[ 0.76572574, 0.45332754], 
     [ 0.87982243, 0.15773385], 
     [ 0.5762041 , 0.91268172]]]]) 

# Both values for this specific sample at x = 0, y = 1 and z = 2 
mdarray[0,1,2] 
Out[67]: array([ 0.80658387, 0.43464532]) 

mdarray[0,1,2,0] # mean only at the same point 
Out[68]: 0.8065838666297338 

mdarray[0,1,2,1] # variance only at the same point 
Out[69]: 0.43464532443865489 

を使用して多次元配列を作成して操作することができます

mean  = mdarray[:,:,:,0] 
variance = mdarray[:,:,:,1] 

mean 
Out[74]: 
array([[[ 0.80091246, 0.94264747, 0.64503087], 
     [ 0.21371798, 0.79783723, 0.80658387], 
     [ 0.04566927, 0.8280196 , 0.59271082]], 

     [[ 0.82533798, 0.76496127, 0.22767752], 
     [ 0.76849458, 0.93313128, 0.06897508], 
     [ 0.15975812, 0.40292818, 0.48805502]], 

     [[ 0.66522525, 0.29369336, 0.46411967], 
     [ 0.50339875, 0.80520751, 0.08296022], 
     [ 0.76572574, 0.87982243, 0.5762041 ]]]) 

私は私がこのデータをプロットすることをどのように望んでいたのかまだ分かりませんが、これについて少し考えてこの回答を更新します。

関連する問題