You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

二维numpy数组行归一化后替换行结果全为0的问题求解

问题原因

你初始化的array2d由np.arange(20)生成,numpy默认生成的是整数类型数组,该类型仅支持存储整数值。当你计算得到每行的归一化结果(均为小于1的浮点数)后,赋值回原整数数组时,numpy会自动对浮点数做截断取整,小于1的正数会全部转为0,因此最终输出全0数组。

解决方法

你可以通过调整数组类型或者使用更高效的向量化写法解决该问题:

  • 方法1:初始化数组时直接指定浮点类型
    生成数组时添加dtype参数设定为浮点型,示例代码:
    import numpy as np
    array2d = np.arange(20, dtype=np.float64).reshape(4,5)
    for i in range(4):
        array2d[i] = array2d[i] / np.sum(array2d[i])
    
  • 方法2:计算前转换数组类型
    若不便修改初始化逻辑,可在计算前调用astype方法转换类型:
    import numpy as np
    array2d = np.arange(20).reshape(4,5).astype(np.float64)
    for i in range(4):
        array2d[i] = array2d[i] / np.sum(array2d[i])
    
  • 方法3:使用向量化操作省略循环(性能更优)
    利用numpy的广播特性,无需手写循环即可完成逐行归一化:
    import numpy as np
    array2d = np.arange(20, dtype=np.float64).reshape(4,5)
    array2d = array2d / array2d.sum(axis=1, keepdims=True)
    
    其中axis=1指定按行求和,keepdims=True保证求和后的维度和原数组匹配,避免广播报错。

以上方法运行后均可得到你预期的归一化结果。

内容的提问来源于stack exchange,提问作者djokovic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 15:09:00