揭秘Pandas中drop函数的inplace参数:90%新手都踩过的坑

第一章:揭秘Pandas中drop函数inplace参数的核心机制

在使用Pandas进行数据处理时,`drop` 函数是删除行或列的常用工具。其中 `inplace` 参数决定了操作是否直接修改原始数据对象。理解其核心机制对于避免数据误操作和内存管理至关重要。

inplace参数的行为差异

当 `inplace=False`(默认值)时,`drop` 函数返回一个新的DataFrame,原始数据保持不变;而设置 `inplace=True` 时,原地修改当前对象,不返回新对象。
  • inplace=False:适用于需要保留原始数据的场景
  • inplace=True:节省内存,但会永久改变原始数据

代码示例与执行逻辑

# 创建示例数据
import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})

# 方式一:inplace=False(默认)
new_df = df.drop('B', axis=1)
print(df)        # 原始df未变
print(new_df)    # 返回新df,包含删除后的结果

# 方式二:inplace=True
df.drop('B', axis=1, inplace=True)
print(df)        # 原始df已被修改,不再包含列B

使用建议对比表

场景推荐设置说明
数据探索阶段inplace=False便于回溯原始数据,避免副作用
生产环境/内存受限inplace=True减少内存占用,提升效率
graph TD A[调用drop函数] --> B{inplace=True?} B -->|是| C[修改原DataFrame] B -->|否| D[返回新DataFrame] C --> E[原对象变更] D --> F[需赋值接收结果]

2.1 理解inplace参数的布尔控制逻辑

在数据处理与深度学习框架中,`inplace` 参数通过布尔值控制操作是否直接修改原始数据。设置为 `True` 时,运算结果将覆盖输入,节省内存;设置为 `False` 时则返回新对象,保留原数据。
行为对比示例
import torch
x = torch.tensor([1.0, 2.0, 3.0])
y = x.relu(inplace=False)  # y为新张量,x保持不变
x.relu_(inplace=True)      # x被原地修改
上述代码中,`relu_()` 为原地操作方法,配合 `inplace=True` 直接更新输入内存,适用于内存敏感场景。
使用建议与权衡
  • 启用 inplace 可减少内存拷贝,提升运行效率
  • 但会丢失原始数据,影响反向传播中的梯度计算
  • 调试阶段建议关闭,确保数值可追溯

2.2 不设置inplace时的数据视图与副本行为

在Pandas中,当未设置`inplace=True`时,大多数数据操作方法(如`drop()`、`fillna()`、`rename()`等)默认返回一个新的DataFrame副本,而原始数据保持不变。
数据副本的生成机制
此类操作不会修改原对象,而是创建一个包含更改的新视图或深拷贝。这确保了数据处理过程中的可追溯性与安全性。
  • 原始数据不受影响,适合需要保留初态的场景
  • 返回新对象,需重新赋值以保存结果
import pandas as pd
df = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df.drop('B', axis=1)  # 未生效:未接收返回值
df_new = df.drop('B', axis=1)  # 正确方式:接收副本
上述代码中,`drop()`返回的是一个删除列后的新DataFrame,原`df`仍包含列'B'。必须通过变量赋值捕获返回值才能使用新数据结构。

2.3 inplace=True背后的原地修改原理

在Pandas中,`inplace=True`参数控制操作是否直接修改原始数据对象。启用该选项后,方法将不会返回新的DataFrame或Series,而是直接更新原对象的内存数据。
原地修改的执行机制
当设置`inplace=True`时,Pandas绕过复制流程,直接在原有数据块上进行变更,从而节省内存并提升性能。

import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3]})
df.drop(index=0, inplace=True)  # 原始df被直接修改
上述代码中,`drop()`方法未返回新对象,而是直接移除索引为0的行,并同步更新`df`内部结构。
内存与副作用分析
  • 优点:减少内存拷贝,适合处理大规模数据
  • 风险:丢失原始数据,影响链式调用兼容性

2.4 内存效率与链式操作的冲突分析

在现代编程中,链式操作提升了代码可读性,但可能引发内存效率问题。频繁的对象复制和中间结果缓存会显著增加内存开销。
典型场景示例
result := data.Filter(f1).Map(m1).Reduce(r1)
上述代码每一步都生成新对象,导致多次堆分配。Filter、Map 产生的临时切片未被复用,加剧GC压力。
性能对比
操作方式内存分配量执行时间
链式调用高较长
迭代合并低较短
通过将Filter-Map融合为单次遍历,可减少70%以上临时对象创建,实现内存友好型处理流程。

2.5 常见误用场景与错误提示解读

误用场景一:并发访问未加锁
在多协程环境下共享变量时,未使用互斥锁可能导致数据竞争。
var counter int
func worker() {
    for i := 0; i < 1000; i++ {
        counter++ // 危险:未加锁
    }
}
上述代码在多个worker同时运行时会引发竞态条件。应使用sync.Mutex保护共享资源。
常见错误提示解析
  • fatal error: concurrent map iteration and map write:表示正在遍历map的同时有其他协程修改了它,应使用读写锁或同步机制。
  • panic: sync: unlock of unlocked mutex:多次释放同一互斥锁,确保Unlock前已成功Lock。
合理识别这些错误有助于快速定位并发问题根源。

3.1 使用inplace=False进行安全的数据探索

在数据探索阶段,保持原始数据的完整性至关重要。通过设置 inplace=False,所有操作将返回新的数据对象,而不会修改原始数据。
参数说明与使用场景
inplace 参数控制操作是否直接修改原对象。设为 False 时,方法返回副本,适用于调试和对比分析。
import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df_dropped = df.drop(columns='A', inplace=False)
上述代码中,drop() 返回删除列后的新 DataFrame,原始 df 保持不变,确保了数据探索过程的安全性。
优势对比
  • 避免意外数据丢失
  • 支持多版本结果对比
  • 便于调试与回溯

3.2 在数据清洗流程中合理应用inplace=True

在数据清洗过程中,`inplace=True` 参数常用于直接修改原始数据对象,避免创建副本,从而节省内存并提升性能。然而,其使用需谨慎,以防止意外丢失原始数据。
适用场景分析
  • 大规模数据集处理时,启用 inplace=True 可显著降低内存占用;
  • 在管道化清洗流程中,连续操作可减少变量管理复杂度。
代码示例与说明
df.dropna(subset=['age'], inplace=True)
该语句直接从 DataFrame df 中移除 age 列含空值的行,不返回新对象。参数 inplace=True 确保原数据被修改,适用于已确认无需回溯的清洗步骤。
风险提示
若未事先备份,无法恢复原始数据。建议在交互式调试阶段优先使用默认 inplace=False,确认逻辑正确后再启用就地修改。

3.3 结合copy()方法规避意外数据丢失

在处理可变数据结构时,直接赋值可能导致多个引用共享同一对象,修改一处即影响全局。使用 `copy()` 方法可创建独立副本,避免副作用。
浅拷贝的应用场景
当数据结构仅包含不可变类型时,浅拷贝足以隔离原对象:
original = [1, 2, 3]
backup = original.copy()
backup.append(4)
print(original)  # 输出: [1, 2, 3]
此处 copy() 生成新列表,确保 original 不受 backup 变更影响。
深层嵌套需谨慎
若列表包含列表等可变元素,应改用 copy.deepcopy()。否则内层对象仍会被共享,存在数据污染风险。

4.1 构建可复现的数据处理流水线

在数据工程中,确保处理流程的可复现性是保障结果一致性的核心。通过版本化数据与代码、使用确定性处理逻辑,能够有效避免“一次成功,次次失败”的问题。
声明式流水线定义
采用声明式配置描述数据转换步骤,提升可读性与维护性:
# 定义数据处理任务
tasks = {
    "extract": {"source": "raw_logs", "format": "json"},
    "transform": {"module": "cleaner.v2", "encoding": "utf-8"},
    "load": {"target": "warehouse.staging", "mode": "overwrite"}
}
该配置明确每个阶段的输入、输出与处理逻辑,便于审计和重放。
依赖管理与环境隔离
  • 使用容器镜像固化运行环境(如Docker)
  • 通过requirements.txt锁定Python依赖版本
  • 引入DVC或Pachyderm管理数据版本
结合CI/CD机制,每次执行均可追溯至特定代码与数据快照,真正实现端到端可复现。

4.2 单元测试中对inplace副作用的验证策略

在单元测试中验证 inplace 操作的副作用,关键在于隔离状态变更并精确断言其影响范围。
测试前后的状态对比
通过深拷贝原始数据,确保测试前后对象状态可比。例如在 Python 中:
import copy
import unittest

def process_inplace(data):
    data.append("modified")
    return None  # 显式无返回

class TestInplaceMutation(unittest.TestCase):
    def test_inplace_effect(self):
        original = [1, 2, 3]
        snapshot = copy.deepcopy(original)
        process_inplace(original)
        self.assertNotEqual(snapshot, original)
        self.assertIn("modified", original)
该代码通过 deepcopy 保留初始状态,验证函数是否真实修改了输入对象,而非返回新实例。
副作用检测清单
  • 输入对象身份(id)是否保持不变
  • 函数返回值是否为 None 或忽略
  • 对象内部状态(如长度、字段值)是否符合预期变更

4.3 与pandas其他修改类方法的兼容性对比

在使用 `pandas` 进行数据操作时,`assign` 方法与其他修改类方法如 `loc`、`iloc` 和 `apply` 在链式调用中的兼容性表现各异。
链式操作支持能力
  • assign 支持函数式编程风格,返回新 DataFrame,便于链式调用;
  • loc 直接修改原数据,可能引发 SettingWithCopyWarning;
  • apply 可结合 assign 使用,增强表达力。
典型代码示例
df.assign(x2=df.x * 2).assign(x3=lambda d: d.x2 + 1)
该代码通过连续 assign 实现字段叠加计算。每次调用均生成新对象,避免中间状态污染,适合函数式流水线构建。相比之下,loc 需预先确保视图安全性,难以无缝嵌入方法链。

4.4 团队协作中的代码可读性最佳实践

在团队开发中,代码不仅是功能实现的载体,更是成员间沟通的媒介。提升代码可读性可显著降低维护成本,增强协作效率。
命名规范与语义清晰
变量、函数和类名应准确反映其用途。避免缩写歧义,优先使用完整单词组合,如 getUserProfile() 比 getUP() 更具可读性。
注释与文档同步更新
关键逻辑需添加注释说明设计意图。例如:

// calculateTax 计算含税价格,rate 为百分比税率
// 注意:输入金额需已校验为正数
func calculateTax(amount float64, rate float64) float64 {
    return amount * (1 + rate/100)
}
该函数通过参数名和注释明确职责,便于他人复用。
统一代码风格
团队应采用一致的格式化工具(如 Prettier、gofmt),并通过 ESLint 或 SonarLint 进行静态检查,确保风格统一。
实践项推荐工具
代码格式化Prettier, gofmt
静态分析ESLint, SonarLint

第五章:走出误区,掌握高效安全的Pandas编程思维

避免链式赋值陷阱
Pandas中常见的错误是链式赋值,如 df[df['A'] > 2]['B'] = value,这可能触发 SettingWithCopyWarning。应使用 .loc 显式操作:
df.loc[df['A'] > 2, 'B'] = value
优先使用向量化操作
循环处理数据效率低下。例如,计算价格含税值时:
  • 错误方式:使用 for 循环逐行计算
  • 正确方式:利用向量化表达式
df['price_with_tax'] = df['price'] * 1.13
合理管理内存使用
大型数据集易导致内存溢出。可通过类型优化减少占用:
原始类型优化后类型节省空间
int64int32 或 int850%-87.5%
float64float3250%
objectcategory可达90%
确保操作的可重复性
在数据清洗流程中,避免依赖隐式状态。例如,重置索引后应明确赋值:
df = df.reset_index(drop=True)
同时,在多步骤转换中,建议使用函数封装逻辑,提升代码可读性和测试性。
利用查询表达式提升可读性
相比复杂布尔索引,.query() 方法更清晰:
result = df.query('age > 18 and city == "Beijing"')
尤其适用于多条件筛选场景,且支持动态字符串格式化。

相关推荐

Pandas Series和DataFrame本质解析:从报错到直觉的跨越

Series和DataFrame是Pandas最核心的数据结构,其设计远不止于‘表格’或‘一列数据’——Series本质是带标签的一维数组,运算默认按索引对齐;DataFrame则是共享索引的Series字典,行操作实为索引视图。理解这一物理结构,才能规避ValueError、SettingWithCopyWarning等高频报错,掌握.loc/.iloc差异、向量化计算与内存优化逻辑。技术价值在于建立可迁移的数据操作直觉:面对筛选、合并、分组等需求,能自主判断结构选型与方法路径。典型应用场景包括电商退货率

429

pandas笔记2---reset_index函数drop与inplace参数的理解

本文将分为三部分: 1. reset_index函数: 修改排序,否则可能会产生错误,所以对DataFrame做完合并,或者做分组聚合(groupby,agg,transform等函数)后,最好做一个 reset_index处理。 2.drop参数的理解: drop=True: 把原来的索引index列去掉,丢掉。 drop=False:保留原来的索引(以前的可能是乱的) 3. inplac...

三年研究生能改变多少 2万+

Python drop方法删除列之inplace参数实例

主要介绍了Python drop方法删除列之inplace参数实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

Pandas和Numpy:常见函数参数inplace的作用

1.inplace参数的作用 pandas中,包括numpy中很多方法都设置了inplace参数。该参数的主要作用是指示是否在本地数据上做更改,其只能接受bool型参数,即 True和False. 具体示例如下: data为原始数据。接下来用dataframe.drop()删除Timestamp列,但是inplace设置为True,观察函数返回值类型及原始数据data的变化。 从上述...

读万卷书 行万里路 4334

产业园区如何高效对接企业技术需求与高校科研成果?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

体素坐标(voxel_coors)在mmdetection3d中的理解

体素坐标(voxel_coors)在mmdetection3d中的理解

weixin_38362784的博客 4218

python进行数据处理:pandas的drop函数

删除表中的某一行或者某一列更明智的方法是使用drop,它不改变原有的df中的数据,而是返回另一个dataframe来存放删除后的数据。

写bug的程旭源 3588

从零开始STM32cubeide学习

使用的是正点原子的精英版,单片机是STM32F103ZET6,详细讲解完成跑马灯实验

weixin_44077208的博客 2280

【pandas】drop()函数详解

【pandas】drop()函数详解

wzk4869的博客 1万+

On the convergence of FedAvg on non-iid data

On the convergence of FedAvg on non-iid data

Lyn_S的博客 7081

模电专题-MOS管的放大电路分析

在实际应用中,我们经常会使用到功率MOS,这时通常不会将它当成一个开关使用,而是当成一个放大器来使用,那这就需要让其工作在放大状态。参考下图中的mos管的特性曲线,右图中的输出特性曲线中有一根红色的分界线,这个线就是区分mos管工作状态的分界线,在红线的左边,mos管工作在可变电阻区,也就是线性区;在红线的右边mos管工作在恒流区,也就是饱和区。当然,还有一个截止区。本文分析主要运用模电课本中的理论计算验证。

Anitawen的博客 2万+

pandas drop()函数用法

drop()参数解释: text.drop([],axis= ,inplace= ) 默认情况下 axis为0,删除某一行,若要删除某一列,axis=1 inplace=True时,在原来数据上改变,默认inplace为False,不改变原来数据 import pandas as pd import numpy as np from pandas import DataFrame test = DataFrame(np.arange(16).reshape((4,4)),index...

weixin_52797843的博客 3366

实战指南:从零开始用YOLOv8训练VisDrone无人机检测模型

本文提供了一份详细的实战指南,手把手教你从零开始使用YOLOv8训练一个无人机检测模型。内容涵盖VisDrone数据集下载与格式转换、YAML配置文件编写、模型训练与评估,以及最终的推理部署,旨在帮助开发者快速掌握无人机视角下的目标检测技术。

salt的博客 683

揭秘Pandas中inplace=True的隐藏陷阱:90%的数据科学家都忽略的关键细节

掌握Pandas drop的inplace参数用法,避免数据丢失陷阱。详解其在列删除与行索引操作中的适用场景,对比inplace=True与False对原数据的影响,揭示内存优化与代码可读性的权衡技巧,值得收藏。

CodeIsle的博客 1016

FreeRTOS系统从入门到精通万字保姆级教程

例如,在基于ARM的硬件平台上,可能需要实现针对ARM处理器的上下文切换代码,并确保FreeRTOS能够正确地响应和处理ARM架构的中断。需要注意的是,在删除任务之前应确保任务已经完成了其所有重要的工作,并且没有其他的任务依赖于它,以避免数据丢失或系统不稳定。任务的优先级设定是其中的关键环节。在复杂的系统中,可能会有大量的任务需要同时运行,而这些任务的重要性和紧急程度各不相同。这通常包括创建初始任务(这些任务将负责系统的初始化和后续任务的调度)、设置系统时钟(以确保任务的准时调度和延时功能的正确性)等。

大模型大数据攻城狮的专栏 2070

YOLO26涨点改进| CVPR 2026 | 独家创新首发、特征融合改进篇 | 引入 LFSB 差分双维注意融合模块,通过交替特征融合与分离策略,能够精准区分目标特征,顶会助力YOLO26有效涨点

本文提出LSFB差分双维注意融合模块,用于改进YOLO26目标检测模型。该模块通过融合-分离交替策略和差分注意力机制,有效提升模型在复杂场景下的特征分离能力,特别是在处理重叠物体或反射干扰时表现优异。LSFB采用双向投影、双维注意力计算和跨流减法算子,实现特征共享与独立提取的平衡。实验表明,该模块能显著减少特征混淆,提高检测精度和鲁棒性。文章还详细介绍了模块实现的核心代码、YAML配置文件修改方法以及三种改进方案,为YOLO26模型性能提升提供了创新解决方案。

Ai缝合怪、助力小伙伴高效发论文 326

20个真正快的Pandas向量化方法实测指南

Pandas数据处理性能瓶颈往往源于Python循环和低效API调用。其核心加速原理在于底层C/Fortran实现的向量化运算,通过避免逐元素解释执行、利用SIMD指令与内存连续访问,可实现数倍至百倍提速。技术价值体现在ETL清洗、实时特征工程与大规模报表生成等典型场景中,显著降低CPU占用与内存抖动。本文聚焦真实生产环境验证的高效实践,涵盖布尔索引筛选、.str.字符串向量化操作、数值clip/round/pct_change等内置C加速函数,以及链式调用与内存友好的drop_duplicates、ass

dianqi0560的博客 300

01 Python学习总结:Python简介及入门

Python 是一门高级编程语言,以其简洁、易读和强大的功能而广受欢迎。它适用于多种应用场景,包括 Web 开发、数据分析、人工智能、自动化脚本等。以下是 Python 的简介及入门知识总结,帮助你快速了解并开始学习 Python。

数据知道的博客 1万+

数据建模前必查的5个关键统计量实战指南

在机器学习与数据分析中,数值型特征的分布特性直接决定模型稳定性与泛化能力。均值、中位数、标准差、四分位距(IQR)和偏度这五大统计量构成基础分布诊断的核心框架:均值与中位数的偏离揭示异常敏感性,IQR界定鲁棒的正常区间,偏度预判长尾区域的预测误差放大风险。它们共同支撑特征缩放、缺失值填充、目标变量变换及模型选型等关键决策。本文聚焦工业级落地场景——从电商订单金额右偏处理、IoT设备告警边界设定,到电池健康度(SOH)预测中的sqrt变换实践,强调统计量必须成组解读、联动判断。掌握这组‘决策触发器’,是避免R

hwpokay的专栏 344

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

python pandas中 inplace 参数理解

pandas 中 inplace 参数在很多函数中都会有,它的作用是:是否在原对象基础上进行修改 ​ inplace = True:不创建新的对象,直接对原始对象进行修改; ​ inplace = False:对数据进行修改,创建并返回新的对象承载其修改结果。 默认是False,即创建新的对象进行修改,原对象不变,和深复制和浅复制有些类似。 例: inplace=T...

海晨威 9万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

PyTorch 中的 In-place 操作

欢迎关注“小白玩转Python”,发现更多 “有趣”今天的深度神经网络有数以百万计的可训练参数,因此可以试图在免费的 GPU 上训练它们,如 Kaggle 或 Google Colab...

Warmer_Sweeter 8409

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

python pandas 之drop()函数

drop函数的使用 (1)drop() 删除行和列 drop([ ],axis=0,inplace=True) drop([]),默认情况下删除某一行; 如果要删除某列,需要axis=1; 参数inplace 默认情况下为False,表示保持原来的数据不变,True 则表示在原来的数据上改变。 import pandas as pd import numpy as np da...

lhaniey的博客 8万+

机器学习:pandas 库drop()函数,astype()函数

1.drop函数的使用(1)drop函数的使用:删除行、删除列print frame.drop(['a']) print frame.drop(['Ohio'], axis = 1)12drop函数默认删除行,列需要加axis = 1(2)drop函数的使用:inplace参数采用drop方法,有下面三种等价的表达式:1. DF= DF.drop('column_name', axis=1); 2...

乐观的摸摸头的博客 5559

Python数据分析之Pandas(一)

一、Pandas简介 Pandas 是 Python 语言的一个扩展程序库,用于数据分析。 Pandas 是一个开放源码、BSD 许可的库,提供高性能、易于使用的数据结构和数据分析工具。 Pandas 一个强大的分析结构化数据的工具集,基础是 Numpy(提供高性能的矩阵运算)。 Pandas 可以从各种文件格式比如 CSV、JSON、SQL、Microsoft Excel 导入数据。 Pandas 可以对各种数据进行运算操作,比如归并、再成形、选择,还有数据清洗和数据加工特征。 Pandas 广泛应用在学

m0_45903982的博客 903

pandas系列学习教程——drop()方法

在 Pandas 中,drop()方法用于从 DataFrame 中删除指定的行或列。这个方法非常有用,尤其是在数据清洗和预处理阶段,可以帮助你移除不需要的数据。drop()

ZXY_ZXR的博客 1576

【Pandas数据清洗必杀技】:深入解析drop的inplace参数为何让内存效率提升90%

掌握Pandas数据清洗关键技巧,解析drop的inplace参数如何优化内存使用。通过控制inplace参数为True或False,实现原地修改或返回副本,显著提升处理效率,适用于大数据集操作。理解其机制可避免常见误区,值得收藏。

ByteShoal的博客 351
上一篇: 彻底搞懂asyncio.gather异常行为:return_exceptions的3种应用模式
下一篇: MyBatis中foreach遍历Map的key-value(深度实战案例解析)
IterLoom
博客等级 码龄1年 171粉丝 2173原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值