Python Numpy多维数组格式化:获取迭代的末位值、最大值与最小值
问题原因
现有代码中result为不规则嵌套的object类型NumPy数组,直接通过result[-1]取值只会拿到最后一个输入数组的计算结果,直接调用np.max/np.min也无法对嵌套结构做逐序列的极值计算,因此不符合取值要求。
修正后代码
import numpy as np def run(*args): # 原有百分比计算逻辑保留,调整为原生嵌套列表避免NumPy object数组兼容问题 result = [ [((arr[i:] > 0).cumsum() / np.arange(1, len(arr[i:])+1) * 100) for i in range(len(arr))] for arr in args ] last_indexes = [] maxs = [] mins = [] for arr_calc_res in result: cur_last = [] cur_max = [] cur_min = [] for percent_seq in arr_calc_res: cur_last.append(percent_seq[-1]) cur_max.append(percent_seq.max()) cur_min.append(percent_seq.min()) last_indexes.append(cur_last) maxs.append(cur_max) mins.append(cur_min) # 输出结果 print("last_indexes", last_indexes) print("max", maxs) print("min", mins) run(np.array([12,12,-3,-1,2,1]), np.array([-3,-1,-2,1]), np.array([12,-12]))
调整说明
- 将
result改为原生嵌套列表结构,避免不规则嵌套数组在NumPy中取值异常的问题 last_indexes逐一遍历每个百分比序列,取每个序列的末位值,按输入数组分组汇总- 最大值、最小值改为针对每个百分比序列单独计算,再按输入数组分组汇总
运行上述代码输出结果与预期完全一致。
内容的提问来源于stack exchange,提问作者georgehere
相关产品推荐
相关产品推荐

