Python中如何实现for循环遍历数组B生成统一输出数组
Python循环实现批量计算ENU结果
首先补全依赖导入,并且去重你代码中重复定义的B、C变量:
import numpy as np C = [0, 0, 2, 1, 1, 8, 3, 6, 6, 7, 11, 8, 10, 23,22, 12, 15, 34, 16, 9, 11, 6, 0, 0] B = np.array([500, 1000, 1500, 2000, 2500, 3000, 3500, 4000, 4500,5000, 5500, 6000, 6500, 7000, 7500, 8000, 8500, 9000,9500, 10000, 10500, 11000, 11500, 12000]) C_arr = np.array(C)
for循环实现方案
你原代码里ENU_1对应阈值500、ENU_2对应阈值1000,规律为阈值每次递增500,所有计算结果合并为单个数组的实现如下:
# 定义所有要计算的阈值,和示例步长保持一致 thresholds = np.arange(500, 12500, 500) # 初始化结果数组,形状为【阈值数量 × 数组长度】 enu_result = np.zeros((len(thresholds), len(B))) # 循环批量计算 for idx, thr in enumerate(thresholds): enu_result[idx] = np.where(B < thr, 0, (B - thr) * C_arr)
最终得到的enu_result就是你需要的单个数组:
enu_result[0]等价于原代码的ENU_1enu_result[1]等价于原代码的ENU_2- 以此类推,索引值对应第N个ENU的结果
更高效的无循环实现(可选)
如果数据量较大,用numpy广播特性可以替代循环,计算速度更快,结果完全一致:
enu_result = np.where( B[np.newaxis, :] < thresholds[:, np.newaxis], 0, (B[np.newaxis, :] - thresholds[:, np.newaxis]) * C_arr[np.newaxis, :] )
内容的提问来源于stack exchange,提问作者Namita
相关产品推荐
相关产品推荐

