Python算法探索:从经典到现代(三)

一、引言

        随着信息技术的飞速发展,数据已经成为现代社会不可或缺的资源。Python,作为数据处理和分析的利器,为我们提供了大量强大的库和工具,用于从经典到现代的各种算法探索。本文将带你领略Python在算法领域的魅力,从经典算法到现代机器学习算法的演变。


二、经典算法:排序与搜索

  • 排序算法

  • 排序是计算机科学中的基础算法,Python内置了多种排序函数,如sorted()和列表对象的sort()方法,同时,我们还可以手动实现经典的排序算法,如冒泡排序、选择排序、插入排序等。
def bubble_sort(arr):  
    n = len(arr)  
    for i in range(n):  
        for j in range(0, n-i-1):  
            if arr[j] > arr[j+1]:  
                arr[j], arr[j+1] = arr[j+1], arr[j]  
    return arr  
  
# 测试冒泡排序  
arr = [64, 34, 25, 12, 22, 11, 90]  
print(bubble_sort(arr))  # 输出:[11, 12, 22, 25, 34, 64, 90]

  • 搜索算法

  • 搜索算法用于在数据集中查找特定元素。Python中的列表对象提供了in关键字和index()方法来进行简单的搜索。此外,我们还可以实现经典的搜索算法,如线性搜索和二分搜索。
def binary_search(arr, target):  
    low = 0  
    high = len(arr) - 1  
  
    while low <= high:  
        mid = (low + high) // 2  
        if arr[mid] == target:  
            return mid  
        elif arr[mid] < target:  
            low = mid + 1  
        else:  
            high = mid - 1  
    return -1  # 未找到目标  
  
# 测试二分搜索  
arr = [2, 3, 4, 10, 40]  
target = 10  
result = binary_search(arr, target)  
if result != -1:  
    print(f"元素在数组中的索引为 {result}")  
else:  
    print("元素不在数组中")

三、现代算法:机器学习与深度学习

        随着大数据时代的到来,机器学习和深度学习算法成为了研究的热点。Pythonscikit-learn和 tensorflow等库为我们提供了强大的机器学习和深度学习工具。

  • 线性回归

  • 线性回归是一种基础的机器学习算法,用于预测一个或多个自变量与因变量之间的线性关系。使用scikit-learn库,我们可以轻松实现线性回归。
from sklearn.model_selection import train_test_split  
from sklearn.linear_model import LinearRegression  
from sklearn.metrics import mean_squared_error  
import numpy as np  
  
# 假设我们有一些数据  
X = np.array([[1], [2], [3], [4], [5]])  
y = np.array([2, 4, 6, 8, 10])  
  
# 划分训练集和测试集  
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)  
  
# 创建线性回归模型  
model = LinearRegression()  
  
# 训练模型  
model.fit(X_train, y_train)  
  
# 预测测试集  
y_pred = model.predict(X_test)  
  
# 计算均方误差  
mse = mean_squared_error(y_test, y_pred)  
print("Mean Squared Error:", mse)

  • 深度学习:神经网络

  • 深度学习是机器学习的一个子领域,它利用神经网络模型来处理复杂的任务。tensorflow是一个流行的深度学习框架,它提供了构建和训练神经网络所需的各种工具。
import tensorflow as tf  
from tensorflow.keras.models import Sequential  
from tensorflow.keras.layers import Dense  
  
# 创建一个简单的全连接神经网络模型  
model = Sequential()  
model.add(Dense(units=64, activation='relu', input_shape=(784,)))  # 输入层,784个神经元,ReLU激活函数  
model.add(Dense(units=10, activation='softmax'))  # 输出层

四、数据可视化

数据可视化是将数据以图形或图像的形式表示,以便更容易地理解和分析数据Python有多个强大的数据可视化库,如 matplotlibseaborn和 plotly等。

  • 使用matplotlib绘制基础图表

  • matplotlib是Python中非常流行的绘图库,它提供了丰富的绘图功能和灵活的配置选项。
import matplotlib.pyplot as plt  
  
# 示例数据  
x = [1, 2, 3, 4, 5]  
y = [2, 4, 6, 8, 10]  
  
# 绘制折线图  
plt.plot(x, y)  
  
# 设置图表标题和坐标轴标签  
plt.title('Simple Line Plot')  
plt.xlabel('X Axis')  
plt.ylabel('Y Axis')  
  
# 显示图表  
plt.show()

  • 使用seaborn进行高级数据可视化

  • seaborn基于 matplotlib的高级可视化库,它提供了更多的绘图类型和更美观的默认样式。
import seaborn as sns  
import pandas as pd  
  
# 假设我们有一个DataFrame  
df = pd.DataFrame({  
    'A': [1, 2, 3, 4, 5],  
    'B': [5, 4, 3, 2, 1],  
    'C': [2, 3, 5, 7, 11]  
})  
  
# 绘制热力图  
heatmap = sns.heatmap(df.corr(), annot=True)  
  
# 显示图表  
plt.show()

  • 使用plotly创建交互式图表

  • plotly是一个能够创建交互式图表的库,它支持多种图表类型,并且允许用户通过Web浏览器进行交互
import plotly.express as px  
  
# 假设我们有一个DataFrame  
df = px.data.iris()  
  
# 绘制散点图,使用颜色区分不同的物种  
fig = px.scatter(df, x='sepal_width', y='sepal_length', color='species')  
  
# 显示交互式图表  
fig.show()

五、总结

        从经典排序和搜索算法到现代机器学习和深度学习算法,再到数据可视化,Python展示了其作为数据处理和分析工具的强大功能。随着技术的不断发展,Python将继续在算法和数据可视化领域发挥重要作用,帮助我们更好地理解和利用数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/387230.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenAI宣布ChatGPT新增记忆功能;谷歌AI助理Gemini应用登陆多地区

&#x1f989; AI新闻 &#x1f680; OpenAI宣布ChatGPT新增记忆功能&#xff0c;可以自由控制内存&#xff0c;提供个性化聊天和长期追踪服务 摘要&#xff1a;ChatGPT新增的记忆功能可以帮助AI模型记住用户的提问内容&#xff0c;并且可以自由控制其内存。这意味着用户不必…

mysql5.6安装---windows版本

安装包下载 链接&#xff1a;https://pan.baidu.com/s/1L4ONMw-40HhAeWrE6kluXQ 提取码&#xff1a;977q 安装视频 1.解压完成之后将其放到你喜欢的地址当中去&#xff0c;这里我默认放在了D盘&#xff0c;这是我的根目录 2.配置环境变量 我的电脑->属性->高级->环境…

今日arXiv最热NLP大模型论文:清华提出LongAlign,打破长上下文对齐瓶颈,数据、训练策略、评估基准一网打尽

随着LLMs的发展&#xff0c;其支持的上下文长度越来越长。仅一年时间&#xff0c;GPT-4就从一开始的4K、8K拓展到了128k。 128k什么概念&#xff1f;相当于一本300页厚的书。这是当初只支持512个tokens的BERT时代不敢想象的事情。 随着上下文窗口长度的增加&#xff0c;可以提…

【优化数学模型】1. 基于Python的线性规划问题求解

【优化数学模型】1. 基于Python的线性规划问题求解 一、线性规划问题1.概述2.三要素 二、示例&#xff1a;药厂生产问题三、使用 Python 绘图求解线性规划问题1.绘制约束条件2.绘制可行域3.绘制目标函数4.绘制最优解 四、使用 scipy.optimize 软件包求解线性规划问题1.导入库2.…

springboot742餐厅点餐系统

springboot742餐厅点餐系统 获取源码——》公主号&#xff1a;计算机专业毕设大全

面试前的准备

面试前的准备 Java程序员校招与社招的区别 校招和社招都是企业招聘形式的一种&#xff0c;只是面向的对象不同。校招 只允许在校生参加&#xff0c;社招理论上是任何人都能参加的(包括在校生)。 但是&#xff0c;无论是社招还是校招&#xff0c;它的难度都取决于你的水平高低。…

【Win10 触摸板】在插入鼠标时禁用触摸板,并在没有鼠标时自动启用触摸板。取消勾选连接鼠标时让触摸板保持打开状态,但拔掉鼠标后触摸板依旧不能使用

出现这种问题我的第一反应就是触摸板坏了&#xff0c;但是无意间我换了一个账户发现触摸板可以用&#xff0c;因此推断触摸板没有坏&#xff0c;是之前的账户问题&#xff0c;跟系统也没有关系&#xff0c;不需要重装系统。 解决办法&#xff1a;与鼠标虚拟设备有关 然后又从知…

Redis笔记

Redis&#xff08;Remote Dictionary Server&#xff09;是一种非关系型数据库 Redis 与其他 key - value 缓存产品有以下三个特点&#xff1a; Redis支持数据的持久化&#xff0c;可以将内存中的数据保存在磁盘中&#xff0c;重启的时候可以再次加载进行使用。Redis不仅仅…

C# Winform .net6自绘的圆形进度条

using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms;namespace Net6_GeneralUiWinFrm {public class CircularProgressBar : Control{private int progress 0;private int borderWidth 20; // 增加的边框宽度public int Progr…

Qt:槽函数的五种写法

一、Qt4写法&#xff08;不推荐&#xff09; connect(ui.btnOpen,SIGNAL(clicked),this,SLOT( open() ) );因为是以宏定义的方式展开&#xff0c;所以如果SIGNAL写错&#xff0c;或者信号名字、槽函数写错、编译器是无法检验出来的&#xff0c;导致出现隐性BUG&#xff0c;不容…

SpringBoot+Vue3 完成小红书项目

简介 该项目采用微服务架构&#xff0c;实现了前后端分离的系统设计。在前端&#xff0c;我们选择了 Vue3 配合 TypeScript 和 ElementUi 框架&#xff0c;以提升开发效率和用户体验。而在后端&#xff0c;则是运用 SpringBoot 和 Mybatis-plus 进行开发&#xff0c;保证了系统…

JVM(2)实战篇

1 内存调优 1.1 内存溢出和内存泄漏 内存泄漏&#xff08;memory leak&#xff09;&#xff1a;在Java中如果不再使用一个对象&#xff0c;但是该对象依然在GC ROOT的引用链上&#xff0c;这个对象就不会被垃圾回收器回收&#xff0c;这种情况就称之为内存泄漏。 内存泄漏绝…

从汇编角度解释线程间互斥-mutex互斥锁与lock_guard的使用

多线程并发的竞态问题 我们创建三个线程同时进行购票&#xff0c;代码如下 #include<iostream> #include<thread> #include<list> using namespace std; //总票数 int ticketCount100; //售票线程 void sellTicket(int idx) {while(ticketCount>0){cou…

Pycharm里如何设置多Python文件并行运行

点击上方“Python爬虫与数据挖掘”&#xff0c;进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 夕阳何事近黄昏&#xff0c;不道人间犹有未招魂。 大家好&#xff0c;我是皮皮。 一、前言 相信使用Pycharm的粉丝们肯定有和我一样的想法&#xff0c;…

Matplotlib自定义辅助函数 (一):让你的图表大放异彩!

Matplotlib美化秘诀&#xff1a;自定义辅助函数&#xff0c;让你的图表大放异彩&#xff01; 利用Matplotlib进行数据可视化示例 &#x1f335;文章目录&#x1f335; &#x1f333;一、创建自定义样式函数&#x1f333;&#x1f333;二、创建自定义颜色映射&#x1f333;&…

预处理详解(下)

1.#运算符 #运算符将宏的一个参数转换为字符串字面量。它仅允许出现在带参数的宏的替换列表中。 #运算符所执行的操作可以理解为”字符串化“。 例如&#xff1a; 我们将打印的字符串中的n改为参数n,这样在传参的时候就也会随着变化。假如我们不将其改为参数n的话会发生什么呢…

黑马Java——异常、File、综合案例

一、异常 误区&#xff1a;不是让我们以后不出异常&#xff0c;而是出现异常了之后&#xff0c;如何去处理 1、异常的分类 1.1、Error 1.2、Exception 1.3、小结 2、编译时异常和运行时异常 2.1、编译时异常 2.2、运行时异常 2.3、为什么异常要分成编译时异常和运行时异常&…

随机过程及应用学习笔记(三)几种重要的随机过程

介绍独立过程和独立增量过程。重点介绍两种独立增量过程-—维纳过程和泊松过程。 目录 前言 一、独立过程和独立增量过程 1、独立过程&#xff08;Independent Process&#xff09; 2、独立增量过程&#xff08;Independent Increment Process&#xff09; 二、正态过程&am…

【c++】构造函数(上)

Hello everybody!今天我们来聊一聊构造函数的用法和一些基本性质。内容比较多&#xff0c;我打算分两篇文章讲完&#xff01; 希望大家在看完我的文章后能够有所收获&#xff01; 1.构造函数的定义 构造函数是特殊的成员函数&#xff0c;需要注意的是&#xff0c;构造函数虽然…

Editable Scene Simulation for Autonomous Driving via Collaborative LLM-Agents

ChatSim&#xff1a;首个通过大语言模型实现可编辑逼真3D驾驶场景的仿真 论文链接&#xff1a;https://arxiv.org/pdf/2402.05746.pdf 代码链接&#xff1a;https://github.com/yifanlu0227/ChatSim 1. 摘要&#xff08;Abstract&#xff09; 自动驾驶中的场景仿真因其生成定制…