split_test.m

%split_test源程序
function v=split_test(B,mindim,fun)
%这个函数是split_merge的一部分。
%它决定了四叉区域是否分割。
%当小块被分割时,这个函数返回1(true);它没有被分割时,它返回0(false).

%通过qtdecomp,四叉区域B是图像当前分解大小为m*n的k块。

%在这个程序中,k是在B中区域的数量。
k=size(B,3);

%在每一块执行分割测试。
%如果预测函数返回true,区域是分割,我们得到v中合适的元素是true。否则v中合适的元素是false.
v(1:k)=false;
for I=1:k
    quadregion=B(:,:,I);
    if size(quadregion,1)<=mindim
        v(I)=false;
        continue
    end
    flag=feval(fun,quadregion);
    if flag
        v(I)=true;
    end
你之前的任务停止进行吧 def predict(self): """使用模型进行预测""" if self.model is None: messagebox.showwarning("警告", "请先训练模型") return if self.test_df is None: messagebox.showwarning("警告", "请先选择测试集文件") return try: self.status_var.set("正在生成预测...") self.root.update() # 预处理测试数据 test_scaled = self.scaler.transform(self.test_df[[&#39;水位&#39;]]) # 创建测试集时间窗口 window_size = self.window_size_var.get() X_test, y_test = self.create_dataset(test_scaled, window_size) X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1)) # 进行预测 test_predict = self.model.predict(X_test) # 反归一化 test_predict = self.scaler.inverse_transform(test_predict) y_test_orig = self.scaler.inverse_transform([y_test]).T # 创建时间索引 test_time = self.test_df.index[window_size:window_size + len(test_predict)] # 绘制结果 self.ax.clear() self.ax.plot(self.train_df.index, self.train_df[&#39;水位&#39;], &#39;b-&#39;, label=&#39;训练集数据&#39;) self.ax.plot(test_time, self.test_df[&#39;水位&#39;][window_size:window_size + len(test_predict)], &#39;g-&#39;, label=&#39;测试集数据&#39;) self.ax.plot(test_time, test_predict, &#39;r--&#39;, label=&#39;模型预测&#39;) # 添加分隔线 split_point = test_time[0] self.ax.axvline(x=split_point, color=&#39;k&#39;, linestyle=&#39;--&#39;, alpha=0.5) self.ax.text(split_point, self.ax.get_ylim()[0] * 0.9, &#39; 训练/测试分界&#39;, rotation=90) self.ax.set_title(&#39;大坝渗流水位预测结果&#39;) self.ax.set_xlabel(&#39;时间&#39;) self.ax.set_ylabel(&#39;测压管水位&#39;,rotation=0) self.ax.legend() self.ax.grid(True) self.ax.tick_params(axis=&#39;x&#39;, rotation=45) self.fig.tight_layout() self.canvas.draw() self.status_var.set("预测完成,结果已显示") except Exception as e: messagebox.showerror("预测错误", f"预测失败:\n{str(e)}") self.status_var.set("预测失败") def save_results(self): """保存预测结果""" if not hasattr(self, &#39;test_predict&#39;) or self.test_predict is None: messagebox.showwarning("警告", "请先生成预测结果") return save_path = filedialog.asksaveasfilename( defaultextension=".xlsx", filetypes=[("Excel文件", "*.xlsx"), ("所有文件", "*.*")] ) if not save_path: return try: # 创建包含预测结果的DataFrame window_size = self.window_size_var.get() test_time = self.test_df.index[window_size:window_size + len(self.test_predict)] result_df = pd.DataFrame({ &#39;时间&#39;: test_time, &#39;实际水位&#39;: self.test_df[&#39;水位&#39;][window_size:window_size + len(self.test_predict)].values, &#39;预测水位&#39;: self.test_predict.flatten() }) # 保存到Excel result_df.to_excel(save_path, index=False) # 保存图表 chart_path = os.path.splitext(save_path)[0] + "_chart.png" self.fig.savefig(chart_path, dpi=300) self.status_var.set(f"结果已保存至: {os.path.basename(save_path)}") messagebox.showinfo("保存成功", f"预测结果和图表已保存至:\n{save_path}\n{chart_path}") except Exception as e: messagebox.showerror("保存错误", f"保存结果失败:\n{str(e)}") def reset(self): """重置程序状态""" self.train_df = None self.test_df = None self.model = None self.train_file_var.set("") self.test_file_var.set("") self.ax.clear() self.loss_ax.clear() self.canvas.draw() self.loss_canvas.draw() self.data_text.delete(1.0, tk.END) self.status_var.set("已重置,请选择新数据") messagebox.showinfo("重置", "程序已重置,可以开始新的分析") 帮我修改这三个方法使之契合你先前提供的代码
07-18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值