我有三个六维Numpy
数组(在python 3.4上运行)的形式
Weights
MyValue
WeightedValue = Weight * MyValue
我想确定按 Weights
' axis-j
加权的 MyValue
的加权平均值(范围可能为 0 到 4)跨其他轴,除了轴 5
是恒定的。
(因此,当 j=2
时,我们对 0,1,3,
和 4
进行平均)。
然后,我打算取此平均值并乘以 Weights
,然后从 WeightedValue
中减去乘积
我打算这样做是
NewArray = WeightedValue - Weight * fn( Weighted Value, Weights )
NewMyValue = NewArray / Weights
fn()
将是 MyValue
的平均值,定义为:
the sum of Weighted Value using 4 axes ( all except j and 5 )
< divided by >---------------------------------------------------------------
the sum of Weights across 4 axes ( all except j and 5 )
我的问题如下:
平均值是一个 2D 数组,我需要 fn()
来生成 6D 数组,即在其他 4- 数组上广播 2D 结果尺寸
作为最后的手段,我可以创建一系列循环来迭代轴 j
和轴 5
。对于第二个轴(j=1),循环将是如下
import numpy as np
result = np.zeros((dim0,dim1,dim2,dim3,dim4,dim5))
for var1 in range(dim1):
for var5 in range(dim5):
result[:,dim1,:,:,:,dim5] = AverageValue[dim1,dim5]
但我希望有一种更直接、更通用的方法
最佳答案
您可以使用:代替fn
:
j = 1;
axes = tuple({0,1,2,3,4} - {j})
fn = WeightedValue.sum(axes, keepdims=True) / Weights.sum(axes, keepdims=True)
关键显然是传递 keepdims=True
,这会在求和轴的结果中保留单一维度,并使结果适合进一步广播。
关于python - 如何将 numpy 2D 数组广播到 6D 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26187093/