【问题标题】:RuntimeWarning: invalid value encountered in long_scalarsRuntimeWarning:long_scalars 中遇到无效值
【发布时间】:2016-04-15 01:20:45
【问题描述】:

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

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 中遇到无效值

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

【问题讨论】:

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


    【解决方案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]])
    

    【讨论】:

    • @twallien 您不需要使用循环,只需将您的数组名称更改为a
    • 我尝试了替换,但由于重塑它出现了“ValueError:新数组的总大小必须保持不变”。我尝试用 np.shape(a) 替换 reshape 中的值,用 np.shape(a)[1] 替换 repeat 参数,但仍然返回错误。
    • @twallien a 是你的 let_mat 数组吗?
    • 是的,这是代码:shape = np.shape(let_mat) let_prob = np.round((let_mat/np.repeat(let_mat.sum(axis=1),shape[1]).reshape(shape).astype(float))*100,2)
    • @twallien 我认为你需要解开你的形状。使用reshape(*shape)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 2015-03-06
    • 2019-04-10
    • 1970-01-01
    • 2013-02-18
    相关资源
    最近更新 更多