无需循环计算含不同长度NumPy子数组的数组中各子数组均值
计算不等长二维数组的子数组均值(无显式循环)
你的array_combined因子数组长度不一致,被numpy创建为dtype=object的数组,直接调用np.mean无法按子数组计算均值,以下是两种无需手动写循环的实现方式:
方法1:利用np.vectorize
np.vectorize可将单元素函数转换为能作用于数组每个元素的向量化函数,这里用它包装np.mean来处理每个子数组:
import numpy as np array1 = np.array([1,2,3,4,5]) array2 = np.array([1,2,3]) array3 = np.array([1,2,3,4,5]) list_combined = [array1, array2, array3] array_combined = np.array(list_combined) # 生成向量化均值函数 vec_mean = np.vectorize(lambda arr: np.mean(arr)) subarray_means = vec_mean(array_combined) print(subarray_means) # 输出:[3. 2. 3.]
方法2:利用np.frompyfunc
np.frompyfunc可以创建自定义通用函数,实现无显式循环的计算:
# 创建计算均值的通用函数 mean_ufunc = np.frompyfunc(lambda arr: np.mean(arr), 1, 1) # 转换为float类型(frompyfunc默认返回object数组) subarray_means = mean_ufunc(array_combined).astype(float) print(subarray_means) # 输出:[3. 2. 3.]
注意
np.vectorize和np.frompyfunc底层仍会遍历数组元素,但它们不需要你手动编写for/while循环,满足你的需求。
内容的提问来源于stack exchange,提问作者Syed Muhammad Zain
相关产品推荐
相关产品推荐

