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=-1numpy.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中标准化二维数组的一维? [复制]

numpy——数组存取

是否有一种内置方法可以从 PHP 中的多暗淡数组中获取数组?

高效标准化 Numpy 数组中的图像

numpy数组-标准化数据