Numpy:能否展平尺寸不等的多维数组?如何求子数组最后一维最小值?
解决不规则多维数组最后一维最小值的问题
看起来你有一个由多个二维数组组成的一维数组,每个二维数组的列数(最后一维)都是5,但行数各不相同。要找出所有子数组最后一维的最小值,这里分两种常见需求给出解法:
需求1:获取最后一维每个位置的全局最小值(结果为长度5的数组)
比如你想知道所有子数组中,第0列的最小值、第1列的最小值……第4列的最小值,可以这么做:
import numpy as np # 遍历每个子数组,计算各自最后一维的最小值(每个子数组得到(5,)的结果) per_subarray_col_min = [sub_arr.min(axis=1) for sub_arr in results_rmse] # 将这些结果堆叠成二维数组,再按列取最小值 final_col_min = np.stack(per_subarray_col_min).min(axis=0) print(final_col_min) # 输出形状为(5,)的数组,对应每列的全局最小值
需求2:获取所有元素中最后一维的全局标量最小值
如果你只需要整个集合里最小的那个值,可以简化为:
# 方法1:先合并所有子数组为一个大的二维数组,再取全局最小值 all_data = np.vstack(results_rmse) global_min = all_data.min() # 方法2:直接遍历每个子数组取最小值,再取这些最小值中的最小 global_min = np.min([sub_arr.min() for sub_arr in results_rmse])
为什么不能直接用规整数组的方法?
因为你的数组是不规则的嵌套数组(每个子数组的第一维长度不同),NumPy无法直接对这类数组使用axis参数进行跨子数组的计算,所以必须先遍历处理每个子数组,再合并结果。
内容的提问来源于stack exchange,提问作者Oliver Crow
相关产品推荐
相关产品推荐

