制作多维向量列表

Making a multidimensional list of vectors

我对 Python 很陌生,所以请多多包涵。我正在编写一个程序来计算一些物理量,我们称它为 A。A 是几个变量的函数,我们称它们为 x、y、z。所以我有三个嵌套循环来计算我感兴趣的 x、y、z 值的 A。

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() 的函数来初始化 A。我该怎么做?什么是实现我想要的最简单方法,以及如何轻松访问给定 (x,y,z) 的均值和方差?

(最终目标是能够绘制均值和方差作为误差条,所以如果有更优雅的方法来做到这一点,我也很感激)

提前致谢!

您可以使用 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 ]]])

我仍然不确定我更愿意如何绘制这些数据,会考虑一下并更新这个答案。