解决方案

Python基础 Numpy菜鸟教程

seo靠我 2023-09-25 23:32:48

NumPy(Numerical Python)是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

NumPy 的前身 Numeric 最早是由SEO靠我 Jim Hugunin 与其它协作者共同开发,2005 年,Travis Oliphant 在 Numeric 中结合了另一个同性质的程序库 Numarray 的特色,并加入了其它扩展而开发了 NuSEO靠我mPy。NumPy 为开放源代码并且由许多协作者共同维护开发。

NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:

一个强大的N维数组对象 ndarray广播功能函数整合 C/C++/FoSEO靠我rtran 代码的工具线性代数、傅里叶变换、随机数生成等功能

使用 pip 安装 :

pip3 install --user numpy scipy matplotlib

--user 选项可以设置只安装在SEO靠我当前的用户下,而不是写入到系统目录。

默认情况使用国外线路,国外太慢,我们使用清华的镜像就可以:

pip3 install numpy scipy matplotlib -i https://pypi.tSEO靠我una.tsinghua.edu.cn/simple

安装验证 :

>>> from numpy import * >>> eye(4) array([[1., 0., 0SEO靠我., 0.],[0., 1., 0., 0.],[0., 0., 1., 0.],[0., 0., 0., 1.]])

NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型SEO靠我数据的集合,以 0 下标为开始进行集合中元素的索引。

ndarray 对象是用于存放同类型元素的多维数组。

ndarray 中的每个元素在内存中都有相同存储大小的区域。

ndarray 内部由以下内容组成:SEO靠我

一个指向数据(内存或内存映射文件中的一块数据)的指针。

数据类型或 dtype,描述在数组中的固定大小值的格子。

一个表示数组形状(shape)的元组,表示各维度大小的元组。

一个跨度元组(stride),SEO靠我其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数。

numpy.array(object, dtype = None, copy = True, order = None, subok SEO靠我= False, ndmin = 0)

实例 1

import numpy as np a = np.array([1,2,3]) print (a)

实例 2

# 多于一个维SEO靠我度 import numpy as np a = np.array([[1, 2], [3, 4]]) print (a)

实例 3

# 最小维度 SEO靠我 import numpy as np a = np.array([1, 2, 3, 4, 5], ndmin = 2) print (a)

实例 4

# dtypeSEO靠我 参数 import numpy as np a = np.array([1, 2, 3], dtype = complex) print (a)

NumSEO靠我Py 数据类型

 数据类型对象 (dtype)

numpy.dtype(object, align, copy) object - 要转换为的数据类型对象align - 如果为 true,填SEO靠我充字段使其类似 C 的结构体。copy - 复制 dtype 对象 ,如果为 false,则是对内置数据类型对象的引用

实例 1

import numpy as np # 使用标量类型 SEO靠我 dt = np.dtype(np.int32) print(dt)

实例 2

import numpy as np # int8, int16, int32,SEO靠我 int64 四种数据类型可以使用字符串 i1, i2,i4,i8 代替 dt = np.dtype(i4) print(dt)

实例 3

import numpy as SEO靠我np # 字节顺序标注 dt = np.dtype(<i4) print(dt)

实例 4

# 首先创建结构化数据类型 import numSEO靠我py as np dt = np.dtype([(age,np.int8)]) print(dt)

实例 5

# 将数据类型应用于 ndarray 对象 iSEO靠我mport numpy as np dt = np.dtype([(age,np.int8)]) a = np.array([(10,),(20,),(30,)], dSEO靠我type = dt) print(a)

实例 6

# 类型字段名可以用于存取实际的 age 列 import numpy as np dt = np.dtySEO靠我pe([(age,np.int8)]) a = np.array([(10,),(20,),(30,)], dtype = dt) print(a[age])

NumPySEO靠我 数组属性

NumPy 数组的维数称为秩(rank),秩就是轴的数量,即数组的维度,一维数组的秩为 1,二维数组的秩为 2,以此类推。

在 NumPy中,每一个线性的数组称为是一个轴(axis),也就是维SEO靠我度(dimensions)。比如说,二维数组相当于是两个一维数组,其中第一个一维数组中每个元素又是一个一维数组。所以一维数组就是 NumPy 中的轴(axis),第一个轴相当于是底层数组,第二个轴是底SEO靠我层数组里的数组。而轴的数量——秩,就是数组的维数。

很多时候可以声明 axis。axis=0,表示沿着第 0 轴进行操作,即对每一列进行操作;axis=1,表示沿着第1轴进行操作,即对每一行进行操作。

NSEO靠我umPy 的数组中比较重要 ndarray 对象属性有:

实例

import numpy as np a = np.arange(24) print (a.ndim) SEO靠我 # a 现只有一个维度 # 现在调整其大小 b = a.reshape(2,4,3) # b 现在拥有三个维度 print SEO靠我(b.ndim) #ndarray.ndim 用于返回数组的维数,等于秩

实例

import numpy as np a = np.array([[1,2,3],[4,5,SEO靠我6]]) print (a.shape)

实例

import numpy as np a = np.array([[1,2,3],[4,5,6]]) a.sSEO靠我hape = (3,2) print (a)

实例

import numpy as np a = np.array([[1,2,3],[4,5,6]]) bSEO靠我 = a.reshape(3,2) print (b)

NumPy 创建数组

umpy.empty 方法用来创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组:

numpSEO靠我y.empty(shape, dtype = float, order = C)

实例

import numpy as np x = np.empty([3,2], dtype = intSEO靠我) print (x)

numpy.zeros

创建指定大小的数组,数组元素以 0 来填充:

mport numpy as np# 默认为浮点数 x = np.zeros(5SEO靠我) print(x)# 设置类型为整数 y = np.zeros((5,), dtype = int) print(y)# 自定义类型 SEO靠我z = np.zeros((2,2), dtype = [(x, i4), (y, i4)]) print(z)

numpy.ones

创建指定形状的数组,数组元素以 1 来填充:

impoSEO靠我rt numpy as np# 默认为浮点数 x = np.ones(5) print(x)# 自定义类型 x = np.ones([2,2], dtySEO靠我pe = int) print(x)

NumPy 从已有的数组创建数组

numpy.asarray

numpy.asarray 类似 numpy.array,但 numpy.asarray SEO靠我参数只有三个,比 numpy.array 少两个。

numpy.asarray(a, dtype = None, order = None)

numpy.frombuffer

numpy.frombuffeSEO靠我r 用于实现动态数组。

numpy.frombuffer 接受 buffer 输入参数,以流的形式读入转化成 ndarray 对象。

numpy.frombuffer(buffer, dtype = flSEO靠我oat, count = -1, offset = 0)

 注意:buffer 是字符串的时候,Python3 默认 str 是 Unicode 类型,所以要转成 bytestring 在原 str 前加SEO靠我上 b。

 NumPy 从数值范围创建数组

numpy.arange

numpy 包中的使用 arange 函数创建数值范围并返回 ndarray 对象,函数格式如下:

numpy.arange(start, SEO靠我stop, step, dtype)

numpy.linspace

numpy.linspace 函数用于创建一个一维数组,数组是一个等差数列构成的,格式如下:

np.linspace(start, stoSEO靠我p, num=50, endpoint=True, retstep=False, dtype=None)

 NumPy 切片和索引

ndarray对象的内容可以通过索引或切片来访问和修改,与 Python SEO靠我中 list 的切片操作一样。

ndarray 数组可以基于 0 - n 的下标进行索引,切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step 参数进行,从原数组中切割SEO靠我出一个新数组。

实例

import numpy as np a = np.arange(10) b = a[2:7:2] # 从索引 2 开始到索引 7 停止,间隔为 2 SEO靠我 print(b)

NumPy 高级索引

实例

import numpy as np x = np.array([[1, 2], [3, 4], [5, 6]]) SEO靠我 y = x[[0,1,2], [0,1,0]] print (y)

NumPy 广播(Broadcast)

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

如果两个数组 a 和 b 形状相同,即满足 a.shape == b.shape,那么 a*b 的结果就是 a 与 b 数组对应位相乘。这要求维SEO靠我数相同,且各维度的长度相同。

实例

import numpy as np a = np.array([1,2,3,4]) b = np.array([10,20,30,40SEO靠我]) c = a * b print (c)

实例

import numpy as np a = np.array([[ 0, 0, 0], [10,10,SEO靠我10], [20,20,20], [30,30,30]]) b = np.array([1,2,3]) bb = np.tile(b, (4, 1)) # 重复 b 的SEO靠我各个维度 print(a + bb)

简单理解:对两个数组,分别比较他们的每一个维度(若其中一个数组没有当前维度则忽略),满足:

数组拥有相同形状。当前维度的值相等。当前维度的值有一个是 SEO靠我1。

若条件不满足,抛出 "ValueError: frames are not aligned" 异常。

NumPy 迭代数组

NumPy 迭代器对象 numpy.nditer 提供了一种灵活访问一个或者多个SEO靠我数组元素的方式。

迭代器最基本的任务的可以完成对数组元素的访问。

接下来我们使用 arange() 函数创建一个 2X3 数组,并使用 nditer 对它进行迭代。

实例

import numpy as npSEO靠我 a = np.arange(6).reshape(2,3) print (原始数组是:) print (a) print (\n) pSEO靠我rint (迭代输出元素:) for x in np.nditer(a): print (x, end=", " ) print (\n)

修改数组形状

翻转数组 

修改数组维SEO靠我

 连接数组

 分割数组

 数组元素的添加与删除

 NumPy 位运算

注:也可以使用 "&"、 "~"、 "|" 和 "^" 等操作符进行计算。

NumPy 字符串函数

NumPy 数学函数

NumPy 包含大量的各种数SEO靠我学运算的函数,包括三角函数,算术运算的函数,复数处理函数等。

三角函数

import numpy as npa = np.array([0,30,45,60,90]) print (不同角SEO靠我度的正弦值:) # 通过乘 pi/180 转化为弧度 print (np.sin(a*np.pi/180)) print (\n) prSEO靠我int (数组中角度的余弦值:) print (np.cos(a*np.pi/180)) print (\n) print (数组中角度的正切值:) SEO靠我 print (np.tan(a*np.pi/180))

舍入函数

numpy.around() 函数返回指定数字的四舍五入值。

import numpy as npa = np.array([SEO靠我1.0,5.55, 123, 0.567, 25.532]) print (原数组:) print (a) print (\n) priSEO靠我nt (舍入后:) print (np.around(a)) print (np.around(a, decimals = 1)) print (np.SEO靠我around(a, decimals = -1))

numpy.floor()

numpy.floor() 返回小于或者等于指定表达式的最大整数,即向下取整。

import numpy as npa = nSEO靠我p.array([-1.7, 1.5, -0.2, 0.6, 10]) print (提供的数组:) print (a) print (\n) SEO靠我 print (修改后的数组:) print (np.floor(a))

numpy.ceil()

numpy.ceil() 返回大于或者等于指定表达式的最小整数,即向上取整。

impSEO靠我ort numpy as npa = np.array([-1.7, 1.5, -0.2, 0.6, 10]) print (提供的数组:) print (a) SEO靠我 print (\n) print (修改后的数组:) print (np.ceil(a))

NumPy 算术函数

NumPy 算术函数包含简单的加减乘除: add(SEO靠我)subtract()multiply()divide()

需要注意的是数组必须具有相同的形状或符合数组广播规则。

实例

import numpy as np a = np.arange(9, dtSEO靠我ype = np.float_).reshape(3,3) print (第一个数组:) print (a) print (\n) prSEO靠我int (第二个数组:) b = np.array([10,10,10]) print (b) print (\n) print (两个SEO靠我数组相加:) print (np.add(a,b)) print (\n) print (两个数组相减:) print (np.subtSEO靠我ract(a,b)) print (\n) print (两个数组相乘:) print (np.multiply(a,b)) printSEO靠我 (\n) print (两个数组相除:) print (np.divide(a,b))

numpy.reciprocal()

numpy.reciprocal() 函数返SEO靠我回参数逐元素的倒数。如1/4 倒数为 4/1

numpy.power()

numpy.power() 函数将第一个输入数组中的元素作为底数,计算它与第二个输入数组中相应元素的幂。

numpy.mod()

numSEO靠我py.mod() 计算输入数组中相应元素的相除后的余数。 函数 numpy.remainder() 也产生相同的结果。

NumPy 排序、条件刷选函数

numpy.sort()

numpy.sort() 函SEO靠我数返回输入数组的排序副本。函数格式如下:

numpy.sort(a, axis, kind, order)

参数说明:

a: 要排序的数组axis: 沿着它排序数组的轴,如果没有数组会被展开,沿着最后的轴排SEO靠我序, axis=0 按列排序,axis=1 按行排序kind: 默认为quicksort(快速排序)order: 如果数组包含字段,则是要排序的字段

numpy.argsort()

numpy.argsoSEO靠我rt() 函数返回的是数组值从小到大的索引值。

numpy.lexsort()

numpy.lexsort() 用于对多个序列进行排序。把它想象成对电子表格进行排序,每一列代表一个序列,排序时优先照顾靠后SEO靠我的列。

这里举一个应用场景:小升初考试,重点班录取学生按照总成绩录取。在总成绩相同时,数学成绩高的优先录取,在总成绩和数学成绩都相同时,按照英语成绩录取…… 这里,总成绩排在电子表格的最后一列,数学成绩SEO靠我在倒数第二列,英语成绩在倒数第三列。

numpy.argmax() 和 numpy.argmin()

numpy.argmax() 和 numpy.argmin()函数分别沿给定轴返回最大和最小元素的索引SEO靠我

numpy.nonzero()

numpy.nonzero() 函数返回输入数组中非零元素的索引。

numpy.where()

numpy.where() 函数返回输入数组中满足给定条件的元素的索引。

nuSEO靠我mpy.extract()

numpy.extract() 函数根据某个条件从数组中抽取元素,返回满条件的元素。

### ~tips:该篇只是简单的介绍Numpy库的安装及一些内置方法的使用,非常的基础。SEO靠我看不懂的地方多看几遍应该就很容易理解。另外有需要进阶的学习的people可以去Numpy教程官网(上文其实也是大同小异与其手册内容~~~只是其中叫基础的部分的提炼)学习学习。www.runoob.coSEO靠我m     Numpy###

“SEO靠我”的新闻页面文章、图片、音频、视频等稿件均为自媒体人、第三方机构发布或转载。如稿件涉及版权等问题,请与 我们联系删除或处理,客服邮箱:html5sh@163.com,稿件内容仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同 其观点或证实其内容的真实性。

网站备案号:浙ICP备17034767号-2