RuntimeWarning:long_scalars中遇到无效值

时间:2016-01-10 19:02:45

标签: python arrays python-3.x numpy runtime-error

我在修改数组方面存在问题,方法是将每个项目与其行相比的百分比添加到新矩阵中。这是提供错误的代码:

for j in range(1,27):
        for k in range(1,27):
                let_prob[j,k] = let_mat[j,k]*100/(let_mat[j].sum())

我收到错误:

  

RuntimeWarning:在long_scalars中遇到无效值

我试图将分母四舍五入,但没有成功。

1 个答案:

答案 0 :(得分:1)

似乎你正在处理大数字,因为它引发了错误RuntimeWarning。要摆脱这样的错误,作为一种numpythonic方式,您可以先使用np.sum()函数计算每行的总和,方法是指定正确的轴,然后重复并重新整形数组,以便能够与数组分开,它们是100的倍数并将结果舍入:

col, row = np.shape(let_mat) 
let_prob = np.round((let_mat/np.repeat(let_mat.sum(axis=1),row).reshape(col, row).astype(‌​float))*100,2)

演示:

>>> a = np.arange(20).reshape(4,5)
>>> 
>>> a
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19]])

>>> np.round((a/np.repeat(a.sum(axis=1),5).reshape(4,5).astype(float))*100,2)
array([[  0.  ,  10.  ,  20.  ,  30.  ,  40.  ],
       [ 14.29,  17.14,  20.  ,  22.86,  25.71],
       [ 16.67,  18.33,  20.  ,  21.67,  23.33],
       [ 17.65,  18.82,  20.  ,  21.18,  22.35]])