数组缩放异常:np.resize设为[0,1]返回空数组(Colab环境)
问题分析与解决
你的核心问题是混淆了数组形状调整和数值区间缩放的概念,np.resize根本不是用来做数值归一化的工具:
np.resize(a, [0,1])的作用是让数组变成0行1列的形状,自然返回空数组,这是该函数的正常行为,和数值缩放完全无关。np.resize(a, [5,1])只是把原数组的形状改成5行1列,本质是对元素进行重复/截断,同样没有改变数值的区间范围。
正确的数组[0,1]区间缩放实现
要把数组缩放到[0,1]区间,需要用归一化公式:将每个元素减去数组最小值,再除以数组最大值与最小值的差。修改后的代码如下:
import numpy as np test = [0,1,2,3,4,5] arr1 = np.array(test) def rescale(a): """Return the rescaled version of a on the [0,1] interval.""" # 处理数组所有元素相同的情况,避免除零错误 if a.max() == a.min(): return np.zeros_like(a) # 标准归一化公式 return (a - a.min()) / (a.max() - a.min()) # 测试输出 print(rescale(arr1))
运行这段代码会输出:[0. 0.2 0.4 0.6 0.8 1. ],完美实现了最小值为0、最大值为1的区间缩放。
补充说明
如果你确实需要调整数组形状(比如转成列向量),应该在归一化之后使用np.reshape,比如:
rescaled_arr = rescale(arr1) reshaped_arr = np.reshape(rescaled_arr, (-1, 1)) # 转成N行1列的列向量
内容的提问来源于stack exchange,提问作者confusedphysicist
相关产品推荐
相关产品推荐

