Python多变量迭代计算并保存结果:列表推导式、enumerate()应用
遍历温度与湿度并保存计算结果的实现方案
首先咱们明确核心需求:要对每个温度值(0到100,共101个),逐一遍历所有湿度值(0到1.00,共101个)执行计算,然后把每个温度对应的所有湿度计算结果妥善保存下来。
实现思路拆解
- 先生成规范的温度、湿度序列:
- 温度用
np.arange(0, 101)直接生成0到100的整数序列(刚好101个值,包含两端) - 湿度用
np.linspace(0, 1.0, 101)生成均匀分布的0到1.0的101个值(确保精确覆盖两端点,步长为0.01)
- 温度用
- 选择合适的结果存储结构:可以用列表(每个元素对应一个温度下的所有湿度计算结果),或者预分配多维数组(适合大规模计算,效率更高)。
代码示例(两种常用方式)
假设你的计算逻辑封装在my_calculation(T, RH)函数中,它接收单个温度、湿度值,返回一个np.array结果。
方式1:列表推导式(简洁直观,适合快速实现)
import numpy as np # 生成温度和湿度序列 temps = np.arange(0, 101) # 0,1,...,100 共101个值 humids = np.linspace(0, 1.0, 101) # 0.0, 0.01,...,1.0 共101个值 # 替换成你自己的计算逻辑 def my_calculation(T, RH): # 示例:返回包含温度、湿度、二者乘积的数组 return np.array([T, RH, T * RH]) # 嵌套列表推导式:外层遍历温度,内层遍历湿度 results = [np.array([my_calculation(t, rh) for rh in humids]) for t in temps] # 查看T=0时的结果形状:(101, 3) 对应101个湿度值,每个返回3个元素 print(results[0].shape)
方式2:预分配数组(高效,适合大规模计算场景)
如果你的计算返回的数组长度固定,预分配数组能避免列表动态扩容的开销,速度更快:
import numpy as np temps = np.arange(0, 101) humids = np.linspace(0, 1.0, 101) def my_calculation(T, RH): return np.array([T, RH, T * RH]) # 先获取单个计算结果的长度,用于预分配数组 sample_result = my_calculation(0, 0) result_dim = len(sample_result) # 预分配三维数组:(温度数量, 湿度数量, 结果维度) results_array = np.zeros((len(temps), len(humids), result_dim)) # 嵌套循环填充数组 for temp_idx, t in enumerate(temps): for humid_idx, rh in enumerate(humids): results_array[temp_idx, humid_idx] = my_calculation(t, rh) # 查看T=0时的所有结果 print(results_array[0].shape) # 输出 (101, 3)
进阶优化提示
如果你的计算逻辑支持向量化(即可以直接接收数组作为输入),那完全可以跳过逐个遍历湿度的步骤,直接对整个湿度数组计算,效率会大幅提升:
# 假设my_calculation已适配数组输入 results = [my_calculation(t, humids) for t in temps]
另外,保存结果可以用np.savez将所有数据打包存储,方便后续读取:
np.savez('temp_humid_results.npz', *results) # 读取时 loaded_data = np.load('temp_humid_results.npz') results = [loaded_data[f'arr_{i}'] for i in range(len(temps))]
内容的提问来源于stack exchange,提问作者spencerchad
相关产品推荐
相关产品推荐

