numpy,numpy中计算标准差的方法

http://www.itjxue.com  2023-01-09 10:50  来源:未知  点击次数: 

什么是 NUMPY ?

蓝海大脑边缘计算液冷服务器研究人员表示:

NumPy 是一个免费的 Python 编程语言开源库,它功能强大、已经过充分优化,并增加了对大型多维数组(也称为矩阵或张量)的支持。NumPy 还提供了一系列高级数学函数,可与这些数组结合使用。其中包括基本的线性代数、随机模拟、傅立叶变换、三角运算和统计运算。

NumPy 代表 “numerical Python”,基于早期的 Numeric 和 Numarray 库构建而成,旨在为 Python 提供快速的数字计算。如今,NumPy 贡献者众多,并得到了 NumFOCUS 的赞助。

作为科学计算的核心库,NumPy 是 Pandas、Scikit-learn 和 SciPy 等库的基础。它广泛应用于在大型数组上执行优化的数学运算。

numpy怎么发音?

numpy 读法是:英['n?mpi]

NumPy(Numerical Python)是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix)),支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

扩展资料

Python列表中的元素类型是任意的,所以ndarray在存储元素时内存可以连续,而python原生list就只能通过寻址方式找到下一个元素,这虽然也导致了在通用性能方面Numpy的ndarray不及Python原生list,但在科学计算中,Numpy的ndarray就可以省掉很多循环语句,代码使用方面比Python原生list简单的多。

numpy内置了并行运算功能,当系统有多个核心时,做某种计算时,numpy会自动做并行计算。

Numpy底层使用C语言编写,数组中直接存储对象,而不是存储对象指针,所以其运算效率远高于纯Python代码。

参考资料来源:百度百科-numpy

numpy主要特点

二、Numpy介绍

一个强大的N维数组对象

支持大量的数据运算

集成C / C++和Fortran代码的工具

众多机器学习框架的基础库(Scipy/Pandas/scikit-learn/Tensorflow)

三、Numpy的特点

为什么Numpy会快?

我们都知道Python作为一个动态语言一大特点就是慢,语言本身的特点我们可以抛开不说,并且CPython还带有GIL锁,发挥不了多核的优势,但是我们前面学过那么多也没怎么体会到速度慢呢???那是因为前面的django、flask或者scrapy这些框架,其实都是一些基于网络的操作(主要是IO操作)。这里给大家思考题了,为什么网络操作其实并不怎么会受到GIL的影响?快快快思考,如果不知道,我在这里给一张图,就不过多解释了,注意大小顺序按照开销排序

请点击输入图片描述

但是,如果是我们机器学习怎么办,充满大量的计算。没有解决这个问题,会消耗大量的时间运算,如果还是使用原来的Python函数或者工具,那么估计在机器学习领域就没有Python什么事情了!但是有的Numpy就好多了,接下来我们了解了解Numpy到底好在哪?

1、Numpy的数组内存块风格

在numpy当中一个核心就是ndarray(这个稍后会详细介绍),那么这个称之为数组的东西到底跟原本的python列表有什么不同呢,请看一张图:

请点击输入图片描述

从图中我们看出来numpy其实在存储数据的时候,数据与数据的地址都是连续的,这样就给我们操作带来了好处,处理速度快。在计算机内存里是存储在一个连续空间上的,而对于这个连续空间,我们如果创建 Array 的方式不同,在这个连续空间上的排列顺序也有不同。

创建array的默认方式是 “C-type” 以 row 为主在内存中排列

如果是 “Fortran” 的方式创建的,就是以 column 为主在内存中排列

如下图:

请点击输入图片描述

请点击输入图片描述

2、Numpy的并行化运算

那么numpy的第二个特点就是,支持并行化运算,也叫向量化运算。当然向量是数学当中的概念,我们不过多解释,只需要知道他的优势即可。

numpy的许多函数不仅是用C实现了,还使用了BLAS(一般Windows下link到MKL的,下link到OpenBLAS)。基本上那些BLAS实现在每种操作上都进行了高度优化,例如使用AVX向量指令集,甚至能比你自己用C实现快上许多,更不要说和用Python实现的比。

也就是说numpy底层使用BLAS做向量,矩阵运算。比如我们刚才提到的房子面积到价格的运算,很容易使用multi-threading或者vectorization来加速。

问一下Python里的numpy的正确读法是什么?

?numpy?读法是:英['n?mpi],NumPy是Python中科学计算的基础包。

它是一个Python库,提供多维数组对象,各种派生对象(如掩码数组和矩阵),以及用于数组快速操作的各种例程,包括数学逻辑,形状操作,I / O离散傅立叶变换,随机模拟等等。

NumPy包的核心是ndarray对象。这封装了同构数据类型的n维数组,许多操作在编译代码中执行以提高性能。

NumPy数组和标准Python序列之间有几个重要的区别:

1、NumPy数组在创建时具有固定大小,与Python列表(可以动态增长)不同。更改ndarray的大小将创建一个新数组并删除原始数组。

2、NumPy数组中的元素都需要具有相同的数据类型,因此在内存中的大小相同。例外:可以有(Python,包括NumPy)对象的数组,从而允许不同大小的元素的数组。

3、NumPy数组有助于对大量数据进行高级数学和其他类型的操作。通常,与使用Python的内置序列相比,这些操作的执行效率更高,代码更少。

4、越来越多的基于Python的科学和数学软件包正在使用NumPy数组;虽然这些通常支持Python序列输入,但它们在处理之前将这些输入转换为NumPy数组,并且它们通常输出NumPy数组。

numpy 使用

可以使用如下的方式来安装numpy库:

pip install numpy

根据惯例,使用numpy库的导入方式为:

import numpy as np

在导入之后,我们可以通过:

np.__version__

来查看Numpyu库的版本信息。

Numpy提供了很多方式(函数)来创建数组对象,常用的方式如下:

数组对象具有如下常用属性:

我们可以通过调用ravel或flatten方法,对数组对象进行扁平化处理。

二者的区别在于,ravel返回原数组的视图,而flatten返回原数组的拷贝。

Numpy基础20问

一言以蔽之,numpy是python中基于数组对象的科学计算库。

提炼关键字,可以得出numpy以下三大特点:

因为numpy是一个python库,所以使用python包管理工具pip或者conda都可以安装。

安装python后,打开cmd命令行,输入:

即可完成安装。

n维数组(ndarray)对象,是一系列 同类数据 的集合,可以进行索引、切片、迭代操作。

numpy中可以使用 array 函数创建数组:

判断一个数组是几维,主要是看它有几个轴(axis)。

一个轴表示一维数组,两个轴表示二维数组,以此类推。

每个轴都代表一个一维数组。

比如说,二维数组第一个轴里的每个元素都是一个一维数组,也就是第二个轴。

一维数组一个轴:

二维数组两个轴:

三维数组三个轴:

以此类推n维数组。

numpy中常用 array 函数创建数组,传入列表或元组即可。

创建一维数组,并指定数组类型为 int :

创建二维数组:

还可以使用 arange 函数创建一维数字数组,用法类似python的 range 函数.

numpy的 random 模块用来创建随机数组。

random模块还有其他函数,这里不多说。

前面说到,数组维度即代表轴的数量。

我们可以通过数组(adarray)对象的ndim或shape属性,来查看轴的数量。

数组(ndarray)对象的 size 属性可以查看数组包含元素总数。

还可以通过 shape 属性返回元素的乘积,来计算数组元素数量。

Numpy支持的数据类型非常多,所以很适合做数值计算。

下面给出常见的数据类型:

数组(adarrry)对象提供 dtype 属性,用来查看数组类型。

前面说过,数组的 shape 属性返回一个元组,能够反映数组的形状,包括维度以及每个轴的元素数量。

那么如果给定一个数组,怎么改变其形状呢?

常用的方式有两种:

比如说我要将一个二维数组转换为三维数组。

reshape 方法可以传入整数或者元组形式的参数。

传入的参数和 shape 属性返回的元组的含义是一样的。

例如, x2.reshape(1,2,3) 是将二维数组转换成三维数组,参数个数代表要转换的维度,参数数字从左到右分别表示0轴、1轴、2轴的元素数量。

resize 方法和 reshape 方法使用形式一样,区别是 resize 方法改变了原始数组形状。

numpy一维数组的索引和切片操作类似python列表,这里不多讲。

比如说取一维数组前三个元素。

重点是对多维数组的索引和切片。

多维数组有多个轴,那么就需要对每个轴进行索引。

例如,三维数组形状为(x,y,z),分别代表:0轴有x个元素、1轴有y个元素,2轴有z个元素。

对0、1、2轴进行索引,如果取o轴第2个元素、1轴第0个元素、2轴第3个元素,那么索引形式就为[2,0,3]。

切片也是同样道理。

如果取o轴前2个元素、1轴前1个元素、2轴后2个元素,那么切片形式就为[:2,:1,-2:]。

说到迭代,大家很容易想到直接对数组直接使用 for 循环操作,对于一维数组来说,当然是可以的。

但对于多维数组,迭代是相对于0轴完成的,就是多维数组最外层的那一维。

你没有办法直接遍历数组里每一个元素,嵌套循环又太低效。

这个时候就需要用到 flat 方法,它可以将多维数组平铺为一维的迭代器。

数组(ndarray)对象提供了ravel方法,用来将多维数组展开为一维数组。

广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对多个数组的算术运算通常在相应的元素上进行。

较小的数组在较大的数组上“广播”,以便它们具有兼容的形状。

比如说一个一维数组乘以一个数字,相当于一维数组里每个元素都乘以这个数。

如果相同维度的数组进行运算,其shape相同,那么广播就是两个数组相同位数的元素进行运算。

如果两个数组维度不同,进行运算,这里就触发了广播的两个规则。

这两个规则保证了不同维度数组进行运算时,其维度自动调整成一致。

numpy提供了 transpose 函数用以对数组进行维度的调换,也就是转置操作。

转置后返回一个新数组。

当然,可以用更简单的方法。

数组对象提供了 T 方法,用于转置,同样会返回一个新数组。

numpy的 concatenate 函数用于沿指定轴连接相同形状的两个或多个数组。

numpy的 unique 函数用于去除数组中的重复元素,返回一个新数组。

unique 函数还能返回重复元素的索引、计数等信息,可去查文档自定义参数。

numpy文档

菜鸟教程

(责任编辑:IT教学网)

更多

推荐图片影音文章