file-type

Rust编程:手动处理Python导入Excel数据及矩阵操作

PDF文件

下载需积分: 44 | 3.91MB | 更新于2024-08-07 | 178 浏览量 | 62 下载量 举报 收藏
download 立即下载
"深入浅出Rust - 范长春著" 在编程语言Rust中,有时我们需要手动处理数据类型和操作,特别是在涉及到智能指针、类型转换和内存管理时。以下是一些关键知识点: 1. **智能指针**:Rust的智能指针如`Rc`(Reference Counting)提供了共享所有权的概念。`Rc::clone()`方法增加引用计数,而不是进行深度复制。当需要对内部值进行操作时,可能需要手动解引用。 2. **类型转换**:在有冲突的方法调用时,如`Rc<String>`和`String`的`clone()`方法,需要手动解引用以明确调用目标。例如,`(*s).clone()`和`(**s).clone()`分别进行了一级和二级解引用。 3. **自动解引用**:Rust通常会在函数调用时尝试自动解引用,但不是所有情况都适用。例如,在`match`表达式中,`&String`不能直接匹配`&'static str`,这时需要手动转换。可以使用`match s.deref()`或`match &*s`来完成。 4. **`match`表达式**:`match`是Rust中强大的模式匹配工具,但需要注意匹配分支的类型一致性。错误的类型匹配会导致编译错误,如预期`&String`但找到`&'static str`。 5. **trait**:Rust的trait用于定义行为,可以扩展类型的功能。`Deref` trait允许类型自动解引用,`Deref::deref()`方法实现此功能。`use std::ops::Deref;`引入后,可以使用`deref()`进行类型转换。 6. **内存管理**:Rust通过所有权系统确保内存安全。`main`函数是程序执行的起点,`const fn`用于声明常量函数,函数递归调用需要注意避免无限递归。 7. **数组与字符串**:Rust的数组是固定大小的,字符串是动态长度的UTF-8编码序列。字符串操作包括创建、拼接、查找等,需要注意其内存管理和所有权规则。 8. **模式解构**:Rust的`match`、`if-let`和`while-let`提供了模式匹配,可以用于解构复杂类型,如结构体和枚举。 9. **生命周期**:Rust的生命周期是理解借用和所有权的关键,它指定引用的有效时间。生命周期注解可以用来帮助编译器检查借用规则,防止悬挂引用和生命周期不匹配的问题。 10. **NLL(Non-Lexical-Lifetime)**:NLL是Rust的一种优化,改进了生命周期推导,减少了编译错误,并提高了编译效率。 这些知识点展示了Rust语言如何在保持高效性和内存安全性的同时,提供灵活的数据操作和类型系统。理解和掌握这些概念对于编写高质量、安全的Rust代码至关重要。

相关推荐

filetype

import numpy as np import pandas as pd from math import log # ===== Excel数据导入 ===== def import_excel_data(file_path, sheet_name=0): """ 从Excel导入数据 :param file_path: Excel文件绝对路径 :param sheet_name: 工作表名称或索引 :return: 数据矩阵 """ try: # 读取Excel文件 df = pd.read_excel(file_path, sheet_name=sheet_name) print("成功导入数据:") print(df.head()) # 显示前5行数据 return df.values # 转换为NumPy数组 except Exception as e: print(f"导入错误: {e}") return None # ===== 熵权法计算 ===== def entropy_weight(data, positive_indicators=None): """ 熵权法计算函数 :param data: m×n矩阵(m个样本,n个指标) :param positive_indicators: 正向指标列表(True),负向指标列表(False) :return: 各指标权重向量 """ # 1. 数据标准化 min_val = np.min(data, axis=0) max_val = np.max(data, axis=0) # 处理负向指标(成本型指标) if positive_indicators is not None: # 确保指示列表长度匹配 if len(positive_indicators) != data.shape[1]: print("错误: 指标方向列表长度不匹配!") return None # 负向指标标准化:1 - (x-min)/(max-min) normalized = np.zeros_like(data, dtype=float) for j in range(data.shape[1]): if not positive_indicators[j]: normalized[:, j] = 1 - (data[:, j] - min_val[j]) / (max_val[j] - min_val[j] + 1e-8) else: normalized[:, j] = (data[:, j] - min_val[j]) / (max_val[j] - min_val[j] + 1e-8) else: # 默认所有指标为正向 normalized = (data - min_val) / (max_val - min_val + 1e-8) # 2. 计算比重 p = normalized / np.sum(normalized, axis=0) # 3. 计算熵值 m, n = data.shape k = 1 / log(m) # 熵系数 e = np.zeros(n) for j in range(n): for i in range(m): if p[i, j] > 1e-8: # 避免log(0) e[j] += p[i, j] * log(p[i, j]) e[j] = -k * e[j] # 4. 计算差异系数和权重 d = 1 - e weights = d / np.sum(d) return weights # ===== 主程序 ===== if __name__ == "__main__": # 1. 导入Excel数据(替换为你的实际路径) excel_path = "/home/www/桌面/1.xlsx" # 麒麟系统中的绝对路径 data_matrix = import_excel_data(excel_path, sheet_name="Sheet1") if data_matrix is not None: # 2. 指定指标方向(可选) # True表示正向指标(越大越好),False表示负向指标(越小越好) indicator_directions = [True, True, True,True] # 示例:第2列为负向指标 # 3. 计算熵权法权重 weights = entropy_weight(data_matrix, positive_indicators=indicator_directions) # 4. 输出结果 if weights is not None: print("\n熵权法分析结果:") print("各指标权重:", np.round(weights, 4)) print(f"权重总和: {np.sum(weights):.4f}") # 5. 计算综合得分(可选) normalized_data = (data_matrix - np.min(data_matrix, axis=0)) / (np.max(data_matrix, axis=0) - np.min(data_matrix, axis=0)) composite_score = normalized_data @ weights print("\n样本综合得分:") for i, score in enumerate(composite_score): print(f"样本{i+1}: {score:.4f}") 在麒麟系统的idle3.8中帮我给上述代码加入可视化和将结果导出到Excel

filetype

任务描述 本关任务:以澳大利亚信贷批准数据集为本关数据集,划分前600为训练数据集,后90数据为测试数据集,利用逻辑回归模型预测及输出准确率。 相关知识 为了完成本关任务,你需要掌握:1.如何读取数据集,2.如何准确划分训练和测试数据集,3.如何利用逻辑回归进行预测及准确率的输出。 读取数据集 读取数据集是个基本功,导入pandas包,进行数据读取 示例如下: import pandas as pd df=pd.read_excel('数据集') 划分训练和测试数据集 划分数据集,就是将数据集分成两部分,我们可以考虑用切片实现数据集的划分。需要注意的是数据的划分需要分开特征数据和预测变量。列如,训练用的特征数据集用x表示,预测数据用y表示,测试数据则用x1,y1。 示例如下: x=df.iloc[:600,:15].values y=df.iloc[:600,15].values x1=df.iloc[600:,:15].values y1=df.iloc[600:,15].values 如何利用逻辑回归模型预测及准确率分析 1.导入逻辑回归模型板块命名为LR 2.利用逻辑回归模型创建对象lr 3.调用对象中的fit()的方法将训练数据的特征数据和预测变量进行拟合 4.调用对象中的score()方法返回模型准确率。 5.调用对象中的predict()方法,对测试样本进行预测,获得预测结果。 #导入逻辑回归模型 from sklearn.linear_model import LogisticRegression as LR lr = LR() lr.fit(训练的特征数据,训练的预测变量) r=lr.score(训练的特征数据,训练的预测变量) R=lr.predict(预测的特征数据) Z=R-预测的预测变量 Rs=len(Z[Z==0])/len(Z) print('模型准确率为:',r) print('预测准确率为:',Rs) 编程要求 根据提示,在右侧编辑器完善代码,得到结果。#********** Begin **********# #在上一关基础,对经过缺失值填充、数值变量标准化后的数据集,取前600条记录作为训练数据,后90条记录作为测试数据 #构逻辑回归模型,返回计算结果模型准确率rv和预测准确率r def return_values(): import numpy as np X1=np.load('X1.npy') #经过缺失值填充、数值变量标准化后的数据集,numpy数组690*15 Y=np.load('Y.npy') #因变量,numpy数组,690个元素 return(rv,r) #********** End **********#

臧竹振
  • 粉丝: 47
上传资源 快速赚钱