2017-04-24 28 views
1

我對Python很新,所以請耐心等待。我正在編寫一個程序來計算一些物理量,我們稱之爲A. A是幾個變量的函數,我們稱它們爲x,y,z。所以,我有三個嵌套循環來計算的x,y的值A,Z,我感興趣的製作矢量的多維列表

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

現在的問題是,A [X,Y,Z]是二維數組包含平均值和方差,使得​​A [x,y,z] = [平均值,方差]。從其他語言我用來初始化使用函數類似於np.zeros()。我該怎麼做?什麼是實現我想要的最簡單的方法,以及如何輕鬆訪問給定(x,y,z)的均值和方差?

(最終目標是能夠與方差作爲誤差線繪製平均,所以如果有一個更優雅的這樣的方式,我對此表示讚賞和)

在此先感謝!

+0

你究竟在做什麼? Python沒有任何內置類型稱爲「矢量」?你的意思是一個「列表」?或者,你提到'numpy',你的意思是一些'numpy'數據結構? 'A [x,y,z]'意味着一個*三維*數組。 –

回答

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 ]]]) 

我仍然不確定我如何傾向於繪製這些數據,會仔細考慮這一點並更新此答案。