739. 每日温度(Python)

本文介绍了一种基于单调栈的算法,用于处理气温数据列表,生成一个新列表,指示未来更高气温出现所需的最少天数。适用于气温预测场景,算法高效且易于实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。

例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。

提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度,都是在 [30, 100] 范围内的整数。

class Solution:
    def dailyTemperatures(self, T: List[int]) -> List[int]:
        # 可以维护一个存储下标的单调栈,从栈底到栈顶的下标对应的温度列表中的温度依次递减。
        # 如果一个下标在单调栈里,则表示尚未找到下一次温度更高的下标。
        ans = [0] * len(T)
        stack = []
        for i in range(len(T)):
            while stack and T[stack[-1]] < T[i]:    # 栈不为空 && 栈顶温度小于当前温度
                ans[stack[-1]] = i - stack[-1]
                stack.pop()
            stack.append(i)
        return ans
### 使用Python的随机森林算法进行地表温度预测 #### 数据准备阶段 为了有效地使用随机森林算法来进行地表温度预测,前期的数据准备工作至关重要。这包括但不限于收集有关地理位置、时间戳以及其他可能影响温度的因素的信息,比如湿度、风速等环境变量。这些数据可以通过传感器网络获取或者从公开数据库下载。 对于具体操作,在读取和清洗原始数据方面可以依赖`pandas`库提供的强大功能[^1]: ```python import pandas as pd # 加载CSV文件到DataFrame对象中 data = pd.read_csv('temperature_data.csv') # 查看前几行记录以确认加载成功并初步了解数据结构 print(data.head()) ``` #### 特征工程环节 特征工程技术能够帮助提高模型性能,通过创建新的特征或将现有特征转换成更适合的形式来增强输入给定的学习器的能力。针对地表温度这一特定应用场景而言,除了直接使用的观测值外,还可以考虑加入一些衍生指标作为额外维度,例如日较差(Daily Temperature Range, DTR),即每日最高温和最低温之差;季节性因子等等。 此外,考虑到地理因素的影响不可忽视,因此建议引入经纬度坐标系下的位置信息作为辅助解释变量之一。如果适用的话,也可以尝试融合遥感影像资料中的植被覆盖程度等相关要素进来共同构成最终训练集的一部分[^2]。 #### 构建与调参过程 当准备好高质量且具有代表性的样本集合之后,则可着手于建立基于Scikit-Learn框架之上实现的RandomForestRegressor实例,并对其进行超参数优化以便获得最佳拟合效果。下面给出了一段简单的示范代码片段展示如何完成上述任务: ```python from sklearn.model_selection import train_test_split, GridSearchCV from sklearn.ensemble import RandomForestRegressor from sklearn.metrics import mean_squared_error # 将数据划分为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) # 初始化随机森林回归器 rf_model = RandomForestRegressor(random_state=42) # 定义网格搜索范围内的候选参数组合字典 param_grid = { 'n_estimators': [50, 100, 200], 'max_depth': [None, 10, 20, 30], } # 创建GridSearchCV对象执行交叉验证寻找最优解 grid_search = GridSearchCV(estimator=rf_model, param_grid=param_grid, cv=5, scoring='neg_mean_squared_error') grid_search.fit(X_train, y_train) best_rf = grid_search.best_estimator_ # 预测新数据点上的目标值并向用户提供反馈 predictions = best_rf.predict(X_test) mse = mean_squared_error(y_test, predictions) print(f'Mean Squared Error on Test Set: {mse:.4f}') ``` #### 结果解读部分 经过一系列预处理步骤后所得到的结果不仅限于数值型输出本身——更重要的是从中挖掘出潜在规律性和模式化倾向。借助matplotlib或其他可视化工具绘制图表有助于更直观地呈现变化趋势和发展态势,从而为进一步研究提供依据和支持[^3]。 ```python import matplotlib.pyplot as plt plt.figure(figsize=(8,6)) plt.scatter(range(len(predictions)), predictions, c='blue', label="Predicted Values") plt.plot([min(y_test), max(y_test)], [min(y_test), max(y_test)], color='red') # 对角线表示完美匹配的情况 plt.xlabel('Index of Samples') plt.ylabel('Temperature (°C)') plt.title('Comparison Between Predictions and Actuals') plt.legend() plt.show() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI小笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值