Numpy标准化多暗淡(> = 3)数组
Posted
技术标签:
【中文标题】Numpy标准化多暗淡(> = 3)数组【英文标题】:Numpy normalize multi dim (>=3) array 【发布时间】:2017-08-08 21:42:19 【问题描述】:我有一个 5 个暗淡的数组(来自分箱操作)并希望对其进行规范(最后一维的总和 == 1)。
我以为我找到了答案 here 但它说:
ValueError: Found array with dim 5. the normalize function expected <= 2.
我通过 5 个嵌套循环实现了结果,例如:
for en in range(en_bin.nb):
for zd in range(zd_bin.nb):
for az in range(az_bin.nb):
for oa in range(oa_bin.nb):
# reduce fifth dimension (en reco) for normalization
b = np.sum(a[en][zd][az][oa])
for er in range(er_bin.nb):
a[en][zd][az][oa][er] /= b
但我想矢量化操作。
例如:
In [18]: a.shape
Out[18]: (3, 1, 1, 2, 4)
In [20]: b.shape
Out[20]: (3, 1, 1, 2)
In [22]: a
Out[22]:
array([[[[[ 0.90290316, 0.00953237, 0.57925688, 0.65402645],
[ 0.68826638, 0.04982717, 0.30458093, 0.0025204 ]]]],
[[[[ 0.7973917 , 0.93050739, 0.79963614, 0.75142376],
[ 0.50401287, 0.81916812, 0.23491561, 0.77206141]]]],
[[[[ 0.44507296, 0.06625994, 0.6196917 , 0.6808444 ],
[ 0.8199077 , 0.02179789, 0.24627425, 0.43382448]]]]])
In [23]: b
Out[23]:
array([[[[ 2.14571886, 1.04519487]]],
[[[ 3.27895899, 2.33015801]]],
[[[ 1.81186899, 1.52180432]]]])
【问题讨论】:
【参考方案1】:通过列出axis=-1
和numpy.sum
沿最后一个轴求和,保持维度,然后简单地除以数组本身,从而引入NumPy broadcasting
-
a/a.sum(axis=-1,keepdims=True)
这应该适用于一般维数的 ndarray。
或者,我们可以sum
使用axis-reduction,然后使用None/np.newaxis
添加一个新轴以匹配输入数组形状,然后除以 -
a/(a.sum(axis=-1)[...,None])
【讨论】:
你为什么要删除你的 answer 它看起来不错,我会 +1以上是关于Numpy标准化多暗淡(> = 3)数组的主要内容,如果未能解决你的问题,请参考以下文章
One-Hot Encode numpy 数组与 >2 暗淡
python - 如何在python numpy中标准化二维数组的一维? [复制]