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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 22:01:02