numpy 如何高效实现二维数组每列独立归一化(-mean/std)
技术百科
舞夢輝影
发布时间:2026-01-20
浏览: 次 最高效方式是用广播机制一行实现:a_norm = (a - a.mean(axis=0)) / a.std(axis=0, ddof=0);需处理std=0的列,设其标准差为1避免除零;结果等价于sklearn StandardScaler但更快更轻量。
用 numpy 对二维数组每列独立做 Z-score 归一化(即 (x - mean) / std),最高效的方式是利用广播机制,**避免显式循环**,一行代码即可完成。
核心方法:直接使用广播
假设 a 是形状为 (m, n) 的二维数组(m 行、n 列),对每列减去该列均值、再除以该列标准差:
a_norm = (a - a.mean(axis=0)) / a.std(axis=0, ddof=0)
说明:
-
a.mean(axis=0)返回长度为n的一维数组,含每列均值; -
a.std(axis=0, ddo同理返回每列标准差(
f=0)
ddof=0表示总体标准差,与 sklearn 默认一致;若需样本标准差,设ddof=1); - 二者都会自动广播到原数组形状,实现列级向量化运算。
注意除零问题(std=0 的列)
若某列所有值相同(标准差为 0),直接除会得 inf 或 nan。稳妥做法:
stds = a.std(axis=0, ddof=0) stds[stds == 0] = 1 # 防止除零,此时归一化后该列为全 0(因均值已减) a_norm = (a - a.mean(axis=0)) / stds
等价于 sklearn 的 StandardScaler(但更快)
如果你熟悉 sklearn.preprocessing.StandardScaler,它的默认行为就是列归一化(with_mean=True, with_std=True)。纯 numpy 实现无对象开销,适合大批量或嵌入式计算:
- 不依赖 sklearn;
- 无需
fit/transform分步; - 内存连续、计算路径短,通常快 2–5 倍(尤其在中小规模数组上)。
验证是否正确
快速检查归一化结果是否符合预期:
print("每列均值 ≈ 0:", np.allclose(a_norm.mean(axis=0), 0, atol=1e-10))
print("每列标准差 ≈ 1:", np.allclose(a_norm.std(axis=0, ddof=0), 1, atol=1e-10))
# 如果你
# 更快
# 若需
# 是否正确
# 是否符合
# 循环
# 对象
# 不依赖
# transform
# 长度为
# numpy
# 均值
# 标准差
# 以该
# sklearn
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- PHP主流架构如何做单元测试_工具与流程【详解】
- Flask 表单数据通过 SMTP 发送邮件的完整
- Win11怎么设置夜间模式_Windows11显示
- Win10怎样安装Excel数据分析工具_Win1
- php本地部署支持nodejs吗_php与node
- Windows 11如何开启文件夹加密(EFS)_
- Win11声音忽大忽小怎么办 Win11音频增强功
- php8.4匿名类怎么用_php8.4匿名类创建与
- 如何开启Windows的远程服务器管理工具(RSA
- Win11如何设置文件权限 Win11 NTFS文
- Windows10怎样连接蓝牙设备_Windows
- 为什么Go建议使用error接口作为错误返回_Go
- Linux如何使用Curl发送请求_Linux下A
- 如何在Golang中使用内置函数_Golangle
- php做exe支持多线程吗_并发处理实现方式【详解
- Windows蓝屏错误0x00000023怎么修复
- Python爬虫项目实战教程_Scrapy抓取与存
- Win11如何关闭游戏模式 Win11禁用Xbox
- WindowsUSB驱动安装异常怎么办_USB驱动
- Win11怎么开启游戏模式_Windows11优化
- php能控制zigbee模块吗_php通过串口与c
- VSC怎样在VSC中调试PHPAPI_接口调试技巧
- 如何在 Go 中正确反序列化多个同级 XML 元素
- Windows7怎么找回经典开始菜单_Window
- 如何在Golang中使用log包输出不同级别日志_
- 如何在 Go 同包不同文件中正确引用结构体
- Python路径拼接规范_跨平台处理说明【指导】
- Python配置文件操作教程_JSONINIYAM
- Win11怎么更改电脑名称_Windows 11修
- 如何在Golang中处理URL参数_Golang
- VSC怎样用终端运行PHP_命令行执行脚本的步骤【
- mac怎么查看wifi密码_MAC查看已连接WiF
- Mac如何解压zip和rar文件?(推荐免费工具)
- Win11怎么关闭VBS安全性_Windows11
- Win10怎样清理C盘爱奇艺缓存_Win10清理爱
- Windows 10自带杀毒软件在哪_Window
- MAC如何快速搜索大文件_MAC磁盘空间分析与冗余
- php删除数据怎么软删除_添加is_del字段标记
- c# 在高并发下使用反射发射(Reflection
- Win11怎么设置开机问候语_自定义Win11锁屏
- PHP主流架构怎么处理表单验证_规则与自定义【技巧
- c# 如何深拷贝和浅拷贝
- Win11怎么自动隐藏任务栏_Win11全屏显示设
- Win11如何设置环境变量 Win11添加和修改系
- Avalonia如何实现跨窗口通信 Avaloni
- MAC如何隐藏文件夹及文件_MAC终端命令隐藏与第
- Win11怎么检查TPM2.0模块_Windows
- 如何使用Golang搭建Web开发环境_快速启动H
- c++怎么实现高并发下的无锁队列_c++ std:
- Win11怎么开启剪贴板历史记录_Windows1


QQ客服