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

Python中numpy.array元素赋值后异常变为0问题求助

解决numpy数组赋值后元素变为0的问题

原代码

import numpy as np
def function(1st_variable,2nd_variable):
    ratio = 1st_variable/ 2nd_variable

    y = np.power(ratio, 1.1)*0.79

    if y >= value*0.89:
        y = value*0.89

    return y

def calculate(array):
    pre_array = []
    m = len(array[:,0])
    for i in np.arange(m):
          if array[i,4] == 0:
            array[i,2] = 0
            
          elif array[i,4] == 1:
            None

            
          elif array[i,4] == 2:
            
            live_value = array[i,5]
            new_value = function(array[i,2], live_value)

            print("New Ratio:",new_value,"\n")

            array[i,2] = new_value

            print("array:",array[i,2],"\n")

          elif array[i,4] == 3: 
            t= 5400
            array[i,2] = 0.79
            row = (array[i,0],array[i,1], array[i,2],array[i,4])
            pre_array.append(list(row))
            


array = np.array([[ 42280512, 1, 7, 0, 2, 10],
                  [ 42280233, 1, 8, 0, 2, 10],
                  [ 42280562, 1, 9, 0, 2, 10]])

预期输出

New Ratio: 0.533623485601259
array: 0.533623485601259
New Ratio: 0.6180535097191309
array: 0.6180535097191309
New Ratio: 0.7035481925846184
array: 0.7035481925846184

实际输出

New Ratio: 0.533623485601259
array: 0
New Ratio: 0.6180535097191309
array: 0
New Ratio: 0.7035481925846184
array: 0

问题原因

你创建的numpy数组默认是整数类型(dtype=int64),当把计算得到的浮点数赋值给数组元素时,numpy会自动将浮点数截断为整数,导致0.533这类小于1的浮点数被转为0。

解决方法

创建数组时显式指定浮点类型,或者在赋值前将数组转换为浮点类型,同时修正代码中的语法错误:

修正后的代码

import numpy as np
# 修正无效的参数命名(Python标识符不能以数字开头)
def function(var1, var2):
    ratio = var1 / var2
    y = np.power(ratio, 1.1) * 0.79
    # 原代码中value变量未定义,若实际业务有此变量请自行补充
    # if y >= value * 0.89:
    #     y = value * 0.89
    return y

def calculate(array):
    pre_array = []
    m = len(array[:,0])
    for i in np.arange(m):
          if array[i,4] == 0:
            array[i,2] = 0.0  # 用浮点数赋值
          elif array[i,4] == 1:
            pass  # 用pass替代None作为空分支占位符,符合语法规范
          elif array[i,4] == 2:
            live_value = array[i,5]
            new_value = function(array[i,2], live_value)
            print("New Ratio:", new_value, "\n")
            array[i,2] = new_value
            print("array:", array[i,2], "\n")
          elif array[i,4] == 3: 
            t = 5400
            array[i,2] = 0.79
            row = (array[i,0], array[i,1], array[i,2], array[i,4])
            pre_array.append(list(row))

# 创建数组时指定浮点类型
array = np.array([[ 42280512, 1, 7, 0, 2, 10],
                  [ 42280233, 1, 8, 0, 2, 10],
                  [ 42280562, 1, 9, 0, 2, 10]], dtype=np.float64)

# 调用计算函数
calculate(array)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 08:08:26