2017-04-24 9 views
1

나는 파이썬에 대해 아주 익숙하다. 저는 어떤 물리량을 계산하는 프로그램을 작성하고 있습니다. A를 A라고 부릅시다. A는 여러 변수의 함수이고, x, y, z라고 부르 자. 따라서 난에 관심이 X, Y의 값에 대한을 계산 세 중첩 루프 (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]를 2 차원 배열 있다는 A [x, y, z] = [평균, 분산]이되도록 평균값과 분산을 모두 포함합니다. 다른 언어에서 np.zeros()와 비슷한 함수를 사용하여 A를 초기화하는 데 익숙합니다. 어떻게해야합니까? 내가 원하는 것을 달성하는 가장 쉬운 방법은 무엇이며, 주어진 (x, y, z)에 대해 평균과 분산을 어떻게 쉽게 접근 할 수 있습니까?

은 (최종 목표는 오차 막대와 같은 분산과 평균을 그릴 수 있도록, 그래서이 일을 훨씬 더 우아한 방법이 있는지, 그뿐만 아니라 감사) 사전에

감사합니다!

+0

* 정확하게 * 당신과 함께 일하고 있습니까? 파이썬에는 "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 ]]]) 

을 여전히 내가이 데이터를 플로팅하는 것을 선호했는지 확신 할 수 없지만 조금 생각하고 대답을 업데이트 할 것입니다.