运行时警告:long_scalars 中遇到无效值

twa*_*ien 8 python arrays runtime-error numpy python-3.x

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

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())
Run Code Online (Sandbox Code Playgroud)

我收到错误:

运行时警告:long_scalars 中遇到无效值

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

Gou*_*hor 7

如果它为遇到此警告的其他人提供任何帮助,它出现在类似的上下文中,其中我将一个值除以另一个值,并且在我除以 0 的情况下出现警告。添加一个特殊情况,其值为分母,并避免零除,使警告消失。

我不知道为什么出现该警告而不是 ZeroDivisionError。


Kas*_*mvd 3

看来您正在处理大数字,因为它引发了错误RuntimeWarning。要消除此类错误,作为一种数字方法,您可以首先使用以下方法计算每行的总和np.sum()函数通过指定正确的轴来计算每行的总和,然后重复并重塑数组,以便能够除以您的数组,它们乘以100和舍入结果:

\n\n
col, row = np.shape(let_mat) \nlet_prob = np.round((let_mat/np.repeat(let_mat.sum(axis=1),row).reshape(col, row).astype(\xe2\x80\x8c\xe2\x80\x8bfloat))*100,2)\n
Run Code Online (Sandbox Code Playgroud)\n\n

演示:

\n\n
>>> a = np.arange(20).reshape(4,5)\n>>> \n>>> a\narray([[ 0,  1,  2,  3,  4],\n       [ 5,  6,  7,  8,  9],\n       [10, 11, 12, 13, 14],\n       [15, 16, 17, 18, 19]])\n\n>>> np.round((a/np.repeat(a.sum(axis=1),5).reshape(4,5).astype(float))*100,2)\narray([[  0.  ,  10.  ,  20.  ,  30.  ,  40.  ],\n       [ 14.29,  17.14,  20.  ,  22.86,  25.71],\n       [ 16.67,  18.33,  20.  ,  21.67,  23.33],\n       [ 17.65,  18.82,  20.  ,  21.18,  22.35]])\n
Run Code Online (Sandbox Code Playgroud)\n