gpt4 book ai didi

python - 规范化 numpy 中的列

转载 作者:太空宇宙 更新时间:2023-11-04 08:11:23 24 4
gpt4 key购买 nike

问题:

如果我有一个 2D numpy 数组如下:

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

我想将所有列归一化为 1,结果是:

[[0.25, 0.33, 0.25]
[0.25, 0.33, 0.50]
[0.50, 0.33, 0.25]]

请注意,在列的总和为 0 的情况下,我希望它们像您在上面看到的那样均匀分布。它本质上只是缩放,但有一种特殊情况。

现有尝试

如果我保证所有列加起来都是 > 0 那么我可以这样做:

>>> x = np.array([[1,2,3],[4,5,6],[7,8,9]]) * 1.0

>>> x
array([[ 1., 2., 3.],
[ 4., 5., 6.],
[ 7., 8., 9.]])

>>> x / np.sum(x, axis=0)
array([[ 0.08333333, 0.13333333, 0.16666667],
[ 0.33333333, 0.33333333, 0.33333333],
[ 0.58333333, 0.53333333, 0.5 ]])

但是第一个例子失败了,因为你得到了一个 /0 错误。

理想的解决方案

如果有一个通用的解决方案也可以扩展到三维空间,那将是理想的。上面运行的示例对于 3D 数组的工作方式完全相同,但在零情况下仍然失败。

>>> x = np.array([[[1,2,3],[4,5,6],[7,8,9]], [[10, 11, 12], [13, 14, 15], [16, 17, 18]]]) * 1.0

>>> x
array([[[ 1., 2., 3.],
[ 4., 5., 6.],
[ 7., 8., 9.]],

[[ 10., 11., 12.],
[ 13., 14., 15.],
[ 16., 17., 18.]]])

>>> x / np.sum(x, axis=0)
array([[[ 0.09090909, 0.15384615, 0.2 ],
[ 0.23529412, 0.26315789, 0.28571429],
[ 0.30434783, 0.32 , 0.33333333]],

[[ 0.90909091, 0.84615385, 0.8 ],
[ 0.76470588, 0.73684211, 0.71428571],
[ 0.69565217, 0.68 , 0.66666667]]])

最佳答案

只需将全零列设置为任意非零值,然后像以前一样继续:

>>> x = np.array([[1., 0., 1.],
... [1., 0., 2.],
... [2., 0., 1.]])
>>> x[:, np.all(x == 0, axis=0)] = 1
>>> x / np.sum(x, axis=0)
array([[ 0.25 , 0.33333333, 0.25 ],
[ 0.25 , 0.33333333, 0.5 ],
[ 0.5 , 0.33333333, 0.25 ]])

关于python - 规范化 numpy 中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21729328/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com