我在修改数组方面存在问题,方法是将每个项目与其行相比的百分比添加到新矩阵中。这是提供错误的代码:
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中遇到无效值
我试图将分母四舍五入,但没有成功。
答案 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]])