5.2.3.1 避免复杂的元组

本文探讨了在F#编程中使用元组的局限性和最佳实践,建议避免使用包含过多元素的复杂元组,并推荐使用记录类型来提高代码的可读性和维护性。

5.2.3.1 避免复杂的元组

 

很明显,返回有很多元素的元组,wf 使代码难以阅读;在 F# 中,可以用记录类型代替有太多元素的元组。记录提供了一种简单方法,创建有标记成员的类型;记录通常用于保存程序数据,我们将在第七章谈论。

基于函数返回类型中元素的数目,使函数难以使用的观点,也因人而异,但我们建议,避免返回的元组有三、四个以上的元素。当然也有例外,在开发的早期,使用大的元组原型可能是值得的,到后期,对如何构造值有了更清晰地理解,再进行重构;而且,如果元组仅在[函数]内部使用,用较大的元组,比起声明记录类型仅使用一次,可能是更好的选择。

有关元组所需要的内容,我们已经全部讨论了,接下来,在下一节中,我们将介绍构建可选值(Alternative values)的方法,用于表示具有几和可选值的类型。

屋顶关键点检测数据集 一、基础信息 • 数据集名称:屋顶关键点检测数据集 • 图片数量: 训练集:864张图片 验证集:45张图片 测试集:37张图片 总计:946张图片 • 训练集:864张图片 • 验证集:45张图片 • 测试集:37张图片 • 总计:946张图片 • 分类类别: 类别0 • 类别0 • 标注格式: YOLO格式,包含关键点坐标标签,适用于关键点检测任务。 • YOLO格式,包含关键点坐标标签,适用于关键点检测任务。 • 数据格式:图片文件,来源于相关领域数据。 二、适用场景 • 建筑与航拍图像分析:用于检测屋顶结构的关键点,支持建筑评估、航拍数据处理等应用。 • 计算机视觉研究:适用于关键点检测算法的开发与测试,推动AI在特定领域的应用。 • 工业自动化:集成至自动化系统中,用于物体定位和结构分析。 • 学术与教育:作为关键点检测任务的教学数据集,帮助学生和研究人员理解相关技术。 三、数据集优势 • 单类别专注:数据集专注于单一类别(类别0)的关键点检测,便于模型学习和优化。 • 高质量标注:标注数据采用YOLO格式,关键点坐标精确,确保模型训练准确性。 • 数据量充足:提供近千张图片,覆盖多种场景,增强模型的鲁棒性。 • 即插即用:兼容YOLO等主流深度学习框架,可直接用于模型训练,节省预处理时间。
from pylab import * import numpy as np import pandas as pd import matplotlib.pyplot as plt def load_data(): URL_ = &#39;https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data&#39; data = pd.read_csv(URL_, header=None) print(data) # make the dataset linearly separable data = data[:100] data[4] = np.where(data.iloc[:, -1] == &#39;Iris-setosa&#39;, 0, 1) data = np.asmatrix(data, dtype=&#39;float64&#39;) return data def perceptron(data, num_iter): features = data[:, :-1] labels = data[:, 1] # set weights to zero w = np.zeros(shape=(1, features.shape[1+ 1])) misclassified_ = [] for epoch in range(num_iter): misclassified = 0 for x, label in zip(features, labels): x = np.insert(x, 0, 1) y = np.dot(w, x.transpose()) target = 1.0 if (y < 0) else 0.0 delta = (label.item(0, 0) - target) if (delta): # misclassified misclassified += 1 w += (delta * x) misclassified_.append(misclassified) return (w, misclassified_) if __name__ == "__main__": num_iter = 3 data = load_data() mpl.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] plt.scatter(np.array(data[:50, 0]), np.array(data[:50, 2]), marker=&#39;o&#39;, label=&#39;setosa&#39;) plt.scatter(np.array(data[51:, 0]), np.array(data[51:, 2]), marker=&#39;x&#39;, label=&#39;versicolor&#39;) plt.xlabel(&#39;花瓣长度&#39;) plt.ylabel(&#39;花萼长度&#39;) plt.show() w, misclassified_ = perceptron(data, num_iter) epochs = np.arange(1, num_iter) plt.plot(epochs, misclassified_) plt.xlabel(&#39;迭代次数&#39;) plt.ylabel(&#39;分类错误的样本数&#39;) plt.show()其中结果为C:\Users\tritium\anaconda3\python.exe C:\Users\tritium\Desktop\dashuju\案例1:感知机代码.py 0 1 2 3 4 0 5.1 3.5 1.4 0.2 Iris-setosa 1 4.9 3.0 1.4 0.2 Iris-setosa 2 4.7 3.2 1.3 0.2 Iris-setosa 3 4.6 3.1 1.5 0.2 Iris-setosa 4 5.0 3.6 1.4 0.2 Iris-setosa .. ... ... ... ... ... 145 6.7 3.0 5.2 2.3 Iris-virginica 146 6.3 2.5 5.0 1.9 Iris-virginica 147 6.5 3.0 5.2 2.0 Iris-virginica 148 6.2 3.4 5.4 2.3 Iris-virginica 149 5.9 3.0 5.1 1.8 Iris-virginica [150 rows x 5 columns] Traceback (most recent call last): File "C:\Users\tritium\Desktop\dashuju\案例1:感知机代码.py", line 52, in <module> w, misclassified_ = perceptron(data, num_iter) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\tritium\Desktop\dashuju\案例1:感知机代码.py", line 21, in perceptron w = np.zeros(shape=(1, features.shape[1+ 1])) ~~~~~~~~~~~~~~^^^^^^ IndexError: tuple index out of range 如何修正
06-07
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值