【问题标题】:Harmonic average over slices of three-dimensional numpy array三维 numpy 数组切片的谐波平均值
【发布时间】:2020-12-31 00:53:27
【问题描述】:

给定一个三维数组,我想计算二维切片上的算术平均值和谐波平均值。

这可以使用 numpy 的算术平均值轻松完成:

import numpy as np
a = np.arange(5*3*3).reshape(5,3,3)
np.mean(a,axis=(1,2))

对于调和平均,我必须自己对三维数组进行切片。 我可以沿着第一个(0th)轴这样做,例如:

from scipy import stats
b = a.reshape(np.shape(a)[0], -1)
stats.hmean(b,axis=1)

如何对我的三维数组进行整形/切片以计算垂直于其他轴的平均值(即,在轴 0 和 2 上或在轴 0 和 1 上的平均值)?

为了澄清,相应的算术平均值简单地由下式给出:

np.mean(a,axis=(0,2))
np.mean(a,axis=(0,1))

【问题讨论】:

  • 你为什么不坚持使用 numpy 并这样做1/np.mean(1/a, axis=(1,2)) 以获得谐波手段?如果我对您的问题的理解有误,请纠正我
  • 太棒了!是的你是对的。我一直在考虑切片,以至于忽略了这个简洁的 numpy 解决方案。这解决了我的问题(特别是因为类似的技巧可用于几何平均值)。非常感谢!
  • 很高兴为您提供帮助!干杯!
  • 对于其他类型的问题,我仍然对如何对 3D 数组进行切片感兴趣,以便保留中轴。但是,这个问题可以通过您的简单而简单的解决方案来解决。你想把它贴出来让我接受吗?

标签: python arrays numpy


【解决方案1】:

你可以坚持使用 numpy 并调整你的代码来计算调和平均值,如下所示-

1/np.mean(1/a, axis=(0,2))
1/np.mean(1/a, axis=(0,1))

【讨论】:

  • 再次感谢!您的快速回答对我帮助很大。为了完整起见,我补充说我使用1/np.mean(1/a, axis=(0,2)) 垂直于中轴进行平均,1/np.mean(1/a, axis=(0,1)) 垂直于最后一个轴进行平均。
  • 感谢您的输入,我只是想给出一个想法,因为切片轴可以根据需要是任意的。
  • 是的,说得好。这是一个非常通用的答案。万一有人对几何平均值感兴趣,类似的技巧是 np.exp(np.mean(np.log(a),axis=(0,2))) 假设 a 的所有条目都是正数。
猜你喜欢
  • 2016-10-15
  • 2021-09-13
  • 2021-04-22
  • 1970-01-01
  • 2015-12-08
  • 2013-08-23
  • 2015-01-29
  • 2021-11-23
相关资源
最近更新 更多