【发布时间】:2022-01-19 20:16:39
【问题描述】:
我有一个数组,我想按列计算元素的总和 (column_sum),然后将列元素除以 column_sum,这样除法后,列元素的总和就等于 1。
代码:
import numpy as np
# sample array
arr = np.array([[0.045, 0.531, 0.53],
[0.968, 0.051, 0.013],
[0.653, 0.304, 0.332],
[0.065, 0.123, 0.033],
[0.035, 0.328, 0.333],
[0.065, 0.330, 0.333]], np.float32)
print("before\n", arr)
arr_sum = np.array(arr.sum(axis=0),dtype=np.float32)
arr = arr / arr_sum
print("\nafter\n",arr)
print("\ncolumn_sum after division\n")
print(np.array(arr.sum(axis=0),dtype=np.float32))
这里我取 column_sum 并将每个列元素与其对应的 column_sum 相除。
上面的代码给了我这样的输出:
before
[[0.045 0.531 0.53 ]
[0.968 0.051 0.013]
[0.653 0.304 0.332]
[0.065 0.123 0.033]
[0.035 0.328 0.333]
[0.065 0.33 0.333]]
after
[[0.02457674 0.31853628 0.33672175]
[0.5286729 0.03059388 0.00825921]
[0.35663575 0.1823635 0.21092758]
[0.03549973 0.07378524 0.02096569]
[0.01911524 0.19676064 0.21156292]
[0.03549973 0.19796039 0.21156292]]
column_sum after division
[1. 0.99999994 1.0000001 ]
但实际的 column_sum 必须精确为 1(概率之和)或 给出这样的输出:
[1. 1. 1.]
这是使用数据类型 float32 时发生的情况。元素必须是 numpy.float32 类型,并且总和必须为 1。 有什么办法可以克服吗?
【问题讨论】:
标签: python arrays numpy probability float32