当前位置:首页 > 科技  > 软件

向量化操作简介和Pandas、Numpy示例

来源: 责编: 时间:2023-10-16 17:10:00 423观看
导读Pandas是一种流行的用于数据操作的Python库,它提供了一种称为“向量化”的强大技术可以有效地将操作应用于整个列或数据系列,从而消除了显式循环的需要。在本文中,我们将探讨什么是向量化,以及它如何简化数据分析任务。什

Pandas是一种流行的用于数据操作的Python库,它提供了一种称为“向量化”的强大技术可以有效地将操作应用于整个列或数据系列,从而消除了显式循环的需要。在本文中,我们将探讨什么是向量化,以及它如何简化数据分析任务。g5Z28资讯网——每日最新资讯28at.com

g5Z28资讯网——每日最新资讯28at.com

什么是向量化?

向量化是将操作应用于整个数组或数据系列的过程,而不是逐个遍历每个元素。在Pandas中可以对整个列或Series执行操作,而无需编写显式循环。这种高效的方法利用了底层优化的库,使您的代码更快、更简洁。g5Z28资讯网——每日最新资讯28at.com

向量化操作示例

1、基本算术运算

一个具有两列的DataFrame, ' a '和' B ',我们希望以元素方式添加这两列,并将结果存储在新列' C '中。通过向量化,你可以在一行代码中实现这一点:g5Z28资讯网——每日最新资讯28at.com

import pandas as pd  data = {'A': [1, 2, 3], 'B': [4, 5, 6]} df = pd.DataFrame(data) # Using vectorization to add columns 'A' and 'B' df['C'] = df['A'] + df['B'] print(df['C'])  Output: 0   5 1   7 2   9

在本例中,加法运算df['A'] + df['B']同时应用于整个列'A'和'B',结果存储在列'C'中。g5Z28资讯网——每日最新资讯28at.com

2、apply

向量化还允许对列应用自定义函数。假设你想计算一列中每个元素的平方:g5Z28资讯网——每日最新资讯28at.com

import pandas as pd  data = {'A': [1, 2, 3]} df = pd.DataFrame(data) # Define a custom function def square(x):    return x ** 2  # Applying the 'square' function to the 'A' column df['A_squared'] = df['A'].apply(square) print(df['A_squared'])  Output: 0   1 1   4 2   9

使用.apply()将平方函数应用于整个'A'列。不需要显式循环。g5Z28资讯网——每日最新资讯28at.com

3、条件操作

也将矢量化用于条件操作,比如基于列a中的条件创建一个新的列D:g5Z28资讯网——每日最新资讯28at.com

import pandas as pd  data = {'A': [1, 2, 3]} df = pd.DataFrame(data)  # Creating a new column 'D' based on a condition in column 'A' df['D'] = df['A'].apply(lambda x: 'Even' if x % 2 == 0 else 'Odd')  print(df)  Output:    A     D 0 1   Odd 1 2 Even 2 3   Odd

使用lambda函数来检查' a '中的每个元素是偶数还是奇数,并将结果分配给' D '列。g5Z28资讯网——每日最新资讯28at.com

向量化的好处

在Pandas中向量化提供了几个好处:g5Z28资讯网——每日最新资讯28at.com

  • 效率:操作针对性能进行了优化,并且比传统的基于循环的操作快得多,特别是在大型数据集上。
  • 清晰度:与显式循环的代码相比,代码通常更简洁,更容易阅读。
  • 易用性:您可以使用一行代码将操作应用于整个行或列,降低了脚本的复杂性。
  • 兼容性:Pandas与其他数据科学库(如NumPy和scikit-learn)无缝集成,可以在数据分析和机器学习项目中有效地使用向量化数据。

向量化提高代码的速度

向量化是一种强大的编程技术,可以加快代码的执行速度。这种方法利用底层优化的硬件指令和库,使计算更快、更高效。让我们以Python和NumPy为例,探索向量化如何加快代码的速度。g5Z28资讯网——每日最新资讯28at.com

传统的基于循环的处理

在许多编程场景中,可能需要对数据元素集合执行相同的操作,例如逐个添加两个数组或对数组的每个元素应用数学函数。一般都会使用循环一次迭代一个元素并执行操作。g5Z28资讯网——每日最新资讯28at.com

下面是一个没有向量化的Python示例:g5Z28资讯网——每日最新资讯28at.com

list1 = [1, 2, 3, 4, 5] list2 = [6, 7, 8, 9, 10] result = []  for i in range(len(list1)):    result.append(list1[i] + list2[i]) print(result)  Output: [7, 9, 11, 13, 15]

虽然此代码可以工作,但它在循环中单独处理每个元素,这对于大型数据集来说可能很慢。g5Z28资讯网——每日最新资讯28at.com

使用NumPy进行向量化操作

NumPy是一个流行的Python库,提供对向量化操作的支持。它利用了优化的C和Fortran库,使其在数值计算方面比纯Python循环快得多。g5Z28资讯网——每日最新资讯28at.com

下面是使用NumPy的相同加法操作:g5Z28资讯网——每日最新资讯28at.com

array1 = np.array([1, 2, 3, 4, 5]) array2 = np.array([6, 7, 8, 9, 10]) result = array1 + array2 print(result)  Output: [ 7 9 11 13 15]

NumPy可以一次对整个数组执行操作,并且更有效地处理底层细节。g5Z28资讯网——每日最新资讯28at.com

效率比较

比较一下使用NumPy和Python中传统的基于循环的方法执行元素加法所花费的时间。我们将使用timeit模块来度量这两个方法的执行时间。下面是比较的代码:g5Z28资讯网——每日最新资讯28at.com

import numpy as np import timeit  # Create two NumPy arrays and two lists for the comparison array1 = np.random.randint(1, 100, size=1000000) array2 = np.random.randint(1, 100, size=1000000) list1 = list(array1) list2 = list(array2)  # Vectorized processing with NumPy def numpy_vectorized():    result = array1 + array2  # Traditional loop-based processing def loop_based():    result = []    for i in range(len(list1)):        result.append(list1[i] + list2[i])  # Measure execution time for NumPy vectorized approach numpy_time = timeit.timeit(numpy_vectorized, number=100)  # Measure execution time for traditional loop-based approach loop_time = timeit.timeit(loop_based, number=100)  print(f"NumPy Vectorized Approach: {numpy_time:.5f} seconds") print(f"Traditional Loop-Based Approach: {loop_time:.5f} seconds")   Output: NumPy Vectorized Approach: 0.30273 seconds Traditional Loop-Based Approach: 17.91837 seconds

可以看到NumPy向量化方法对于大数据集的速度要快得多,因为它的矢量化操作是经过优化的。g5Z28资讯网——每日最新资讯28at.com

向量化加速代码的原理

向量化为加快代码速度提供了几个优势:g5Z28资讯网——每日最新资讯28at.com

减少循环开销:在传统循环中,存在与管理循环索引和检查循环条件相关的开销。通过向量化,可以消除这些开销,因为这些操作应用于整个数组。g5Z28资讯网——每日最新资讯28at.com

优化的低级指令:像NumPy这样的库使用优化的低级指令(例如,现代cpu上的SIMD指令)来对数组执行操作,充分利用硬件功能。这可以显著提高速度。g5Z28资讯网——每日最新资讯28at.com

并行性:一些向量化操作可以并行化,这意味着现代处理器可以同时执行多个操作。这种并行性进一步加快了计算速度。g5Z28资讯网——每日最新资讯28at.com

总结

Pandas和NumPy等库中的向量化是一种强大的技术,可以提高Python中数据操作任务的效率。可以以高度优化的方式对整个列或数据集合执行操作,从而生成更快、更简洁的代码。所以无论是在处理基本算术、自定义函数还是条件操作,利用向量化都可以极大地改进数据分析工作流。g5Z28资讯网——每日最新资讯28at.com


g5Z28资讯网——每日最新资讯28at.com


g5Z28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-13616-0.html向量化操作简介和Pandas、Numpy示例

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 使用JIB插件轻松实现Spring Boot应用容器化

下一篇: 从CRUD到CQRS:使用Spring微服务转变你的架构策略

标签:
  • 热门焦点
  • 影音体验是真的强 简单聊聊iQOO Pad

    大公司的好处就是产品线丰富,非常细分化的东西也能给你做出来,例如早先我们看到了新的vivo Pad2,之后我们又在iQOO Neo8 Pro的发布会上看到了iQOO的首款平板产品iQOO Pad。虽
  • 把LangChain跑起来的三个方法

    使用LangChain开发LLM应用时,需要机器进行GLM部署,好多同学第一步就被劝退了,那么如何绕过这个步骤先学习LLM模型的应用,对Langchain进行快速上手?本片讲解3个把LangChain跑起来
  • 一篇文章带你了解 CSS 属性选择器

    属性选择器对带有指定属性的 HTML 元素设置样式。可以为拥有指定属性的 HTML 元素设置样式,而不仅限于 class 和 id 属性。一、了解属性选择器CSS属性选择器提供了一种简单而
  • WebRTC.Net库开发进阶,教你实现屏幕共享和多路复用!

    WebRTC.Net库:让你的应用更亲民友好,实现视频通话无痛接入! 除了基本用法外,还有一些进阶用法可以更好地利用该库。自定义 STUN/TURN 服务器配置WebRTC.Net 默认使用 Google 的
  • 为什么你不应该使用Div作为可点击元素

    按钮是为任何网络应用程序提供交互性的最常见方式。但我们经常倾向于使用其他HTML元素,如 div span 等作为 clickable 元素。但通过这样做,我们错过了许多内置浏览器的功能。
  • 小红书1周涨粉49W+,我总结了小白可以用的N条涨粉笔记

    作者:黄河懂运营一条性教育视频,被54万人“珍藏”是什么体验?最近,情感博主@公主是用鲜花做的,火了!仅仅凭借一条视频,光小红书就有超过128万人,为她疯狂点赞!更疯狂的是,这
  • 花7万退货退款无门:谁在纵容淘宝珠宝商家造假?

    来源:极点商业作者:杨铭在淘宝购买珠宝玉石后,因为保证金不够赔付,店铺关闭,退货退款难、维权无门的比比皆是。“提供相关产品鉴定证书,支持全国复检,可以30天无理由退换货。&
  • 年轻人的“职场羞耻感”,无处不在

    作者:冯晓亭 陶 淘 李 欣 张 琳 马舒叶来源:燃次元“人在职场,应该选择什么样的着装?”近日,在网络上,一个与着装相关的帖子引发关注,在该帖子里,一位在高级写字楼亚洲金
  • Counterpoint :OPPO双旗舰战略全面落地 高端产品销量增长22%

    2023年6月30日,全球行业分析机构Counterpoint Research发布的《中国智能手机高端市场白皮书》显示,中国智能手机品牌正在寻求高质量发展,中国高端智能
Top