• 【MindSpore易点通】数据处理之Numpy数组的轴和矢量化


    简介

    NumPy的基本对象是它的ndarray,这是一个n维数组,它也经常出现在面向数组的语言中。本篇内容将一起了解下n维数组中轴符号和矢量化操作,以便可以充分使用NumPy。

    这里从形成一个包含36个元素的三维数组开始。

    在二维中描绘高维数组可能会比较困难。考虑数组形状的一种直观方法是简单地“从左到右读取它”。arr 是一个3乘4乘3的数组。在视觉上,arr可以被认为是三个4x3网格的容器,用图像表示大概是如下图。

    如果是四维或者更多维,很难用图片展示出结构,可以想象是多个三维的数组组成,套娃式的理解。如果需要构造多维的数组时,也可以按照下面的理解方法。可根据自己需求改变参数即可。

    如上图中设置reshape(2,3,4,5),表示我们创建了个四维数组。

    这个四维数组包含2个三维数组;

    每个三维数组中包含3个二维数组;

    每个二维数组的行为4,列为5。

    轴符号

    在NumPy中,轴代表的一个多维数组的某一个维度,轴的数量是与维度数量相等的,但是需要注意轴是从0开始的。下面再测验下轴的顺序。

    这里根据结果反推轴的位置,上面分别设置了axis=0,1,2,3。

    当axis=0,计算作用在第四维,将包含的2个三维数组相加;

    当axis=1,计算作用在第三维,将包含的2个二维数组相加;

    当axis=2,计算作用在第二维,将包含的2个列相加;

    当axis=3,计算作用在第三维,将包含的2个行相加;

    可以发现axis从小到大的话,作用到数组的顺序是由外向内的。

    矢量化

    首先看看什么是矢量,广泛的解释:矢量(英语:Vector)是数学、物理学和工程科学等多个自然科学中的基本概念,指一个同时具有大小和方向的几何对象,因常常以箭头符号标示以区别于其它量而得名。直观上,矢量通常被标示为一个带箭头的线段。线段的长度可以表示矢量的大小,而矢量的方向也就是箭头所指的方向。

    在数组中进行矢量化操作是什么呢:矢量化是作用在整个数组上而不是在各个元素上发生的。

    通常,矢量化数组操作通常比其纯Python操作要快,在任何类型的数值计算中都具有最大的影响。在Python中循环数组或任何数据结构时,会涉及很多开销。 NumPy中的矢量化操作将内部循环委托给高度优化的C和Fortran函数,从而实现更清晰,更快速的Python代码。下面用示例展示效果。

    考虑一个True和False的一维向量,你要为其计算序列中“False to True”转换的数量,首先是用纯Python实现下。

    上面示例中使用了np.random.seed()函数,使用该函数的主要作用是保证每次生成的数组中的值是一致的,对其中传入的参数也随意,使用不同参数下生成的数组中的值是不同。在保证了每次使用的数组是相同的,这样就能够对比Python原生语法和调用NumPy两种方法的效率对比。

    第一次对比的时候设置的size比较小,整体运行下来所用时间也很短,这种情况下调用(Python/NumPy)得到的时间比值为2.8。

    总感觉这样不科学,再次使用祖传的控制变量法,改变size并保持p不变,改变p并保持size不变。

    经过多次的测试,最终的效率比保持在了65左右,很直观的看出来这两种矢量化操作在效率上差了很多,NumPy胜出很多。

    总结

    本次分享首先解释了数组维度和轴,接着用运行结果反推找到了维度和轴的使用顺序。矢量化是作用在整个数组上而不是在各个元素上发生的,通过Python和NumPy两种方法的运行,对比出NumPy在效率上更胜出。

    谢谢浏览,文中有不正确的地方欢迎指出~

  • 相关阅读:
    虚幻引擎图文笔记:动画资源中Force Root Lock的作用
    【优化算法】鹈鹕优化算法(POA)(Matlab代码实现)
    数据结构考试要求-第四章 串,数组和广义表
    SSM+基于SSM的课堂考勤管理系统的设计与实现 毕业设计-附源码191617
    springboot疫情防控学生自助申报系统毕业设计源码260839
    Uniapp导航栏右侧自定义图标文字按钮
    Java进阶架构实战——Redis在京东到家的订单中的使用
    【面向对象依赖关系概念总结】面向对象程序设计的五种依赖关系
    CSS3新增选择器:兄弟选择器:+和~​​​​​​ |属性选择器:^$ *| 伪类选择器
    计算机毕业设计Java门诊管理系统补录(源代码+数据库+系统+lw文档)
  • 原文地址:https://blog.csdn.net/weixin_45666880/article/details/126777335