如何归一化二维数组?求助27×5数组按最后列归一化的方法
当然可以实现!
你提到的27×5数组,要把前4组一维序列按最后一组做归一化完全可行,之前用matrix[:,-1]没成功是因为这只是提取了最后一列的数据,并没有完成归一化的运算逻辑。下面分两种常见的归一化场景给你具体实现方案:
场景1:每组数据按最后一组对应位置的元素做缩放
这种方式是让每一列的每个元素,除以最后一列对应行的元素(相当于以最后一组的每个位置值为基准做归一化),利用NumPy的广播机制就能轻松实现:
import numpy as np import matplotlib.pyplot as plt # 假设你的matrix是(27,5)的NumPy数组 matrix = np.random.rand(27, 5) # 示例数据,替换成你的真实数据 # 关键:给最后一列增加一个维度,让它能和原数组广播运算 normalized_matrix = matrix / matrix[:,-1, np.newaxis] # 绘制归一化后的5条曲线 plt.plot(normalized_matrix) plt.title("Normalized Curves (Scaled by Last Column)") plt.show()
场景2:用最后一组的全局统计量(min/max)将所有组归一化到[0,1]
如果你的需求是把所有组都缩放到和最后一组相同的数值范围(即最后一组归一化后是[0,1],其他组跟着用同样的min和max缩放),代码如下:
import numpy as np import matplotlib.pyplot as plt matrix = np.random.rand(27, 5) # 获取最后一组的最小值和最大值 last_col_min = matrix[:,-1].min() last_col_max = matrix[:,-1].max() # 对整个数组做归一化 normalized_matrix = (matrix - last_col_min) / (last_col_max - last_col_min) plt.plot(normalized_matrix) plt.title("Normalized Curves (Using Last Column's Min/Max)") plt.show()
为什么之前的matrix[:,-1]不行?
matrix[:,-1]返回的是一个形状为(27,)的一维数组,直接和原数组(27,5)运算会触发广播错误(或者不符合你的预期),所以需要用np.newaxis把它变成(27,1)的二维数组,这样就能和原数组的每一列进行逐元素运算了。
内容的提问来源于stack exchange,提问作者Coolcrab
相关产品推荐
相关产品推荐

