基于Python统计不同LST时段城市热岛强度最大值出现频次
城市热岛强度(UHII)时段最大值统计实现方案
逻辑梳理
你的数据是每行对应1天的8个时段UHII值,列顺序对应3、6、9、12、15、18、21、00 LST。要实现的目标就是:
- 找出每天最大值所在的时段位置
- 统计每个时段“成为当日最大值”的总次数
高效实现(Numpy版,适配大数组)
针对9922行的大数据量,用Numpy处理比纯循环快数十倍,代码也简洁:
import numpy as np # 假设你的UHII数据已经是numpy数组(如果是CSV读取,可用np.loadtxt转成数组) uhii_data = np.loadtxt("your_data.csv", delimiter=",") # 替换成你的数据路径 # 1. 按行找出每个最大值对应的列索引(axis=1表示逐行处理) daily_max_indices = np.argmax(uhii_data, axis=1) # 2. 统计每个索引出现的次数,minlength=8确保覆盖8个时段 counts = np.bincount(daily_max_indices, minlength=8) print(counts) # 输出结果就是你要的数组,顺序对应8个LST时段
纯循环实现(新手理解版)
如果想搞懂底层逻辑,用纯Python循环写的话:
# 假设数据是列表格式(比如从CSV读取的列表) uhii_data = [] with open("your_data.csv", "r") as f: for line in f: row = [float(num) for num in line.strip().split(",")] uhii_data.append(row) # 初始化8个时段的计数为0 counts = [0] * 8 # 逐天处理 for daily_values in uhii_data: max_val = max(daily_values) # 找到最大值对应的第一个时段索引 max_idx = daily_values.index(max_val) counts[max_idx] += 1 # 转成numpy数组(可选) counts = np.array(counts) print(counts)
注意事项
- 如果同一天有多个时段的UHII值都是最大值,
np.argmax和list.index只会统计第一个出现的时段;如果需要统计所有符合条件的时段,可改用以下逻辑:counts = np.zeros(8, dtype=int) for row in uhii_data: max_val = np.max(row) # 找出所有等于最大值的索引 indices = np.where(row == max_val)[0] for idx in indices: counts[idx] += 1 - 结果数组的顺序严格对应你给出的时段:索引0→3 LST,索引1→6 LST,…,索引7→00 LST
内容的提问来源于stack exchange,提问作者Abeda
相关产品推荐
相关产品推荐

