python - 如何在 python 中平均数组数组?

标签 python arrays numpy average

我有一个运行多次的模拟。每次生成一个数组时,我都会将它插入到一个更大的数组中,以跟踪所有数据。例如

record = []
for i in range(2):
     r = random.random()
     array = numpy.arange(20)*r
     array.shape = (10,2)
     record.append(array)
record = numpy.array(record)

产生:

[[[  0.           0.88765927]
  [  1.77531855   2.66297782]
  [  3.55063709   4.43829637]
  [  5.32595564   6.21361492]
  [  7.10127419   7.98893346]
  [  8.87659274   9.76425201]
  [ 10.65191128  11.53957056]
  [ 12.42722983  13.3148891 ]
  [ 14.20254838  15.09020765]
  [ 15.97786693  16.8655262 ]]

 [[  0.           0.31394919]
  [  0.62789839   0.94184758]
  [  1.25579677   1.56974596]
  [  1.88369516   2.19764435]
  [  2.51159354   2.82554274]
  [  3.13949193   3.45344112]
  [  3.76739031   4.08133951]
  [  4.3952887    4.70923789]
  [  5.02318709   5.33713628]
  [  5.65108547   5.96503466]]]

因为每个 array 代表我程序中的一个模拟。我想计算 record 中包含的 2 个不同数组的平均值。

基本上我想要一个与 array 维度相同的数组,但它将是所有单独运行的平均值。

我显然可以只遍历数组,但在我的实际模拟中有很多数据,所以我认为这会非常耗时

示例输出(显然它不会为零):

average = [[0.0, 0.0]
           [0.0, 0.0]
           [0.0, 0.0]
           [0.0, 0.0]
           [0.0, 0.0]
           [0.0, 0.0]
           [0.0, 0.0]
           [0.0, 0.0]
           [0.0, 0.0]
           [0.0, 0.0]]

最佳答案

上例中的record 数组是三维的,形状为:

>>> record.shape
(2, 10, 2)

第一个维度对应于实验的 2 次迭代。要对它们进行平均,您需要告诉 np.average 沿 axis=0

执行操作
>>> np.average(record, axis=0)
array([[ 0.        ,  0.45688836],
       [ 0.91377672,  1.37066507],
       [ 1.82755343,  2.28444179],
       [ 2.74133015,  3.19821851],
       [ 3.65510686,  4.11199522],
       [ 4.56888358,  5.02577194],
       [ 5.4826603 ,  5.93954865],
       [ 6.39643701,  6.85332537],
       [ 7.31021373,  7.76710209],
       [ 8.22399044,  8.6808788 ]])

如果您事先知道要运行多少次模拟,最好完全跳过列表并执行如下操作:

simulations, sim_rows, sim_cols = 1000000, 10, 2
record = np.empty((simulations, sim_rows, sim_cols))
for j in xrange(simulations) :
    record[j] = np.random.rand(sim_rows, sim_cols)

>>> np.average(record, axis=0)
[[ 0.50021935  0.5000554 ]
 [ 0.50019659  0.50009123]
 [ 0.50008591  0.49973058]
 [ 0.49995812  0.49973941]
 [ 0.49998854  0.49989957]
 [ 0.5002542   0.50027464]
 [ 0.49993122  0.49989623]
 [ 0.50024623  0.49981818]
 [ 0.50005848  0.50016798]
 [ 0.49984452  0.49999112]]

关于python - 如何在 python 中平均数组数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14715791/

相关文章:

python - Pytest - 将多个 fixture 参数组合到一个 fixture 中以优化 fixture 实例化

python - 从 Mako 模板输出中去除空格 (Pylons)

python - os.walk 中返回的 "root"变量中的完整路径名

python - 类型错误 : Mismatch between array dtype ('object' ) and format specifier ('%.18e' )

python - 在Python中打印引号

javascript - Node js可以在for循环期间通过外部函数修改数组吗?

javascript - Laravel 5 通过 laravel :5 query 检查表中是否存在两条记录

Python numpy loadtxt 因日期时间而失败

python - 一维数组上的 numpy apply_along_axis

python - 根据行中的条件向数据框中添加列