【问题标题】:Python - Average values of numpy multidimensionnal array every specific timePython - 每个特定时间的numpy多维数组的平均值
【发布时间】:2014-07-21 10:48:06
【问题描述】:

我有一个多维数组“test[:,:,:]”,我想为每 4 个“帧”获取 test.shape[0] 维的平均值,我想保持相同的维我的数组并用平均值替换 4 个值。

例如:

test=np.array([[[ 2.,  1.,  1.],
        [ 1.,  1.,  1.]],

       [[ 3.,  1.,  1.],
        [ 1.,  1.,  1.]],

       [[ 3.,  1.,  1.],
        [ 1.,  1.,  1.]],

       [[ 5.,  1.,  1.],
        [ 1.,  1.,  1.]],

       [[ 2.,  1.,  1.],
        [ 1.,  1.,  1.]],

       [[ 3.,  1.,  1.],
        [ 1.,  1.,  1.]],

       [[ 3.,  1.,  1.],
        [ 1.,  1.,  1.]],

       [[ 5.,  1.,  1.],
        [ 1.,  1.,  1.]],

       [[ 2.,  1.,  1.],
        [ 1.,  1.,  1.]]])        


for i in range(test.shape[0]-1,4):
    test_mean = (test[i,:,:]+test[i+1,:,:]+test[i+2,:,:]+test[i+3,:,:])/4.

但是,我没有保持相同的维度……最好的方法是什么?

【问题讨论】:

  • “我不保持相同的维度”的意思不是很清楚。那么,对于 (9, 2, 3) 数组 test,您想要一个 (9, 2, 3) 数组作为结果,还是一个 (2, 2, 3) 数组,还是别的什么?如果您可以明确地为test_mean 添加正确的结果以供参考,我们可以为您提供最好的帮助。
  • 在发布问题后保持在线一段时间也是一个好主意。否则,如果潜在的回答者无法让您对澄清请求发表评论,他们可能会继续前进。
  • 正如我所说,我想保留 (9, 2, 3) 数组!谢谢 ;) (我不得不去)。

标签: python arrays numpy average


【解决方案1】:

你每次都覆盖test_mean。一个好的开始是:

test_mean = np.zeros_like(test)
for i in xrange(test.shape[0]-4):
    test_mean[i] = test[i:i+4].mean(axis=0)

这是来自scipy 的更高效的实现:

from scipy.ndimage import uniform_filter1d
test_mean2 = uniform_filter1d(test, 4, axis=0)

查看文档以了解结果的存储方式以及处理边界值的选项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-09
    • 1970-01-01
    • 2017-12-13
    • 2015-12-08
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多