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

如何将含正负值的Numpy视频特征数组归一化为仅含正值

解决Numpy视频特征数组归一化至全正值的问题

嘿,我来帮你搞定这个问题!你手里有个存在.npy文件里的视频特征数组,形状是(15,2048),既有正值也有负值,想把所有值转成正值,但之前写的代码没起作用是吧?

先说说你之前代码的问题:

Result = np.where(a >= 0, a/np.max(a), -a/np.min(a))

这里的核心bug出在处理负数的分支上——np.min(a)是数组里的最小值,肯定是个负数对吧?那-a(当a是负数时,-a就是正数)除以一个负数,结果又变成负数了!这就导致你处理完之后数组里还是有负值,完全达不到预期效果。

给你几个简单有效的解决方案,按需选择:

方法1:平移至全非负值(最小值为0)

这是最直接的方式,只需要把所有值减去数组的最小值,这样原来的最小值会变成0,其他所有值自然都是非负的,而且还能完整保留数据的相对差异:

import numpy as np

# 加载你的特征数组
a = np.load("your_video_features.npy")

# 平移数组,使最小值为0
normalized = a - np.min(a)

# 验证结果:检查是否所有值都≥0
print(np.all(normalized >= 0))  # 应该输出True

方法2:归一化至0-1区间(全正值)

如果除了全正之外,还希望把值缩放到0到1之间,可以在平移后再除以数组的峰峰值(最大值减最小值):

# 先平移到最小值为0,再缩放到0-1区间
normalized_01 = (a - np.min(a)) / np.ptp(a)

# 验证:所有值在0到1之间
print(np.min(normalized_01), np.max(normalized_01))  # 应该输出0.0和1.0

方法3:绝对值归一化(可选)

如果你不介意改变数据的符号意义,只是单纯要全正值,也可以直接取绝对值再归一化,但这种方式会抹掉原始数据的正负差异,只保留幅度信息,适合不需要符号特征的场景:

# 取绝对值后缩放到0-1区间
abs_normalized = np.abs(a) / np.max(np.abs(a))

这些方法都能轻松解决你的问题,其中方法1和2是更常用的,因为它们保留了原始数据的相对分布,更适合后续的特征处理任务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 13:24:10