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
相关产品推荐
相关产品推荐

