如何在NumPy中将矩阵某一列除以常数?及零值异常问题排查
问题原因与解决方案
问题出在NumPy数组的数据类型上:你创建的data_x是整数类型(int),当执行(data_x[:,i] - mu_i)/d时,计算结果是浮点数,但赋值回整数数组时,NumPy会自动截断小数部分,只保留整数部分。而你计算出的归一化值都在[-0.46, 0.62]区间,小数部分被截断后就变成了0。
解决方法
有两种常用的修复方式:
方法1:初始化时指定浮点数类型
创建数组时通过dtype参数指定浮点类型,比如np.float64:
import numpy as np i = 0 # 初始化时指定浮点类型 data_x = np.array([[3104, 5, 1, 45], [1416, 3, 2, 40], [852, 2, 1, 35]], dtype=np.float64) mu_i = np.mean(data_x[:,i]) print(mu_i) max_num = np.max(data_x[:,i]) min_num = np.min(data_x[:,i]) d = (max_num - min_num) print(d) data_x[:,i] = (data_x[:,i] - mu_i)/d print(data_x)
方法2:赋值前转换数组为浮点类型
在执行归一化操作前,将数组转换为浮点类型:
import numpy as np i = 0 data_x = np.array([[3104, 5, 1, 45], [1416, 3, 2, 40], [852, 2, 1, 35]]) # 转换为浮点类型 data_x = data_x.astype(np.float64) mu_i = np.mean(data_x[:,i]) print(mu_i) max_num = np.max(data_x[:,i]) min_num = np.min(data_x[:,i]) d = (max_num - min_num) print(d) data_x[:,i] = (data_x[:,i] - mu_i)/d print(data_x)
正确运行结果
两种方法都会得到如下正确输出:
1790.6666666666667 2252.0 [[ 0.62761905 5. 1. 45. ] [-0.16636612 3. 2. 40. ] [-0.46125293 2. 1. 35. ]]
内容的提问来源于stack exchange,提问作者Gaff
相关产品推荐
相关产品推荐

