numpy库使用总结
numpy study
0x01:n维数组对象ndaarray
存放同类型元素的多维数组
0x02:numpy数据类型
numpy 的数值类型实际上是 dtype 对象的实例,并对应唯一的字符,包括 np.bool_,np.int32,np.float32,等等。
字定义结构化数据类型:
import numpy as np
student = np.dtype([('name','S20'), ('age', 'i1'), ('marks', 'f4')])
a = np.array([('abc', 21, 50),('xyz', 18, 75)], dtype = student)
print(a)
0x03:数组的属性
ndarray.ndim: 秩,即轴的数量或维度的数量
ndarray.shape 数组的维度,对于矩阵,n 行 m 列
ndarray.size 数组元素的总个数,相当于 .shape 中 n*m 的值
NumPy 也提供了 reshape 函数来调整数组大小。
a = np.array([[1,2,3],[4,5,6]])
b = a.reshape(3,2)
print (b)
0x04:创建数组
numpy.empty 方法用来创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组:
x = np.empty([3,2], dtype = int)
print (x)
numpy.zeros/ones 创建指定大小的数组,数组元素以 0/1 来填充:
x = np.zeros(5)
print(x)
x = np.ones(5)
print(x)
0x05:从已有的数组中创建数组
umpy.asarray 类似 numpy.array,但 numpy.asarray 参数只有三个,比 numpy.array 少两个。
numpy.asarray(a, dtype = None, order = None)
a 任意形式的输入参数,可以是,列表, 列表的元组, 元组, 元组的元组, 元组的列表,多维数组
dtype 数据类型,可选
order 可选,有"C"和"F"两个选项,分别代表,行优先和列优先,在计算机内存中的存储元素的顺序。
0x06:从数值范围创建数组
numpy 包中的使用 arange 函数创建数值范围并返回 ndarray 对象,函数格式如下:
numpy.arange(start, stop, step, dtype)
numpy.linspace 函数用于创建一个一维数组,数组是一个等差数列构成的,格式如下:
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
umpy.logspace 函数用于创建一个于等比数列。格式如下:
np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
0x07:切片和索引
ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样。
ndarray 数组可以基于 0 - n 的下标进行索引,切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step 参数进行,从原数组中切割出一个新数组。
a = np.arange(10)
s = slice(2,7,2) # 从索引 2 开始到索引 7 停止,间隔为2
print (a[s])
冒号 : 的解释:如果只放置一个参数,如 [2],将返回与该索引相对应的单个元素。如果为 [2:],表示从该索引开始以后的所有项都将被提取。如果使用了两个参数,如 [2:7],那么则提取两个索引(不包括停止索引)之间的项。
import numpy as np
a = np.arange(10)
print(a[2:])
多维数组同样适用上述索引提取方法:提取出的为某一行之后的数组
a = np.array([[1,2,3],[3,4,5],[4,5,6]])
print(a)
# 从某个索引处开始切割
print('从数组索引 a[1:] 处开始切割')
print(a[1:])
0x08:高级索引
整数数组索引:两个数组对应元素映射确定一个位置
以下实例获取数组中(0,0),(1,1)和(2,0)位置处的元素。
x = np.array([[1, 2], [3, 4], [5, 6]])
y = x[[0,1,2], [0,1,0]]
print (y)
0x09:numpy广播
广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行。
如果两个数组 a 和 b 形状相同,即满足 a.shape == b.shape,那么 a*b 的结果就是 a 与 b 数组对应位相乘。这要求维数相同,且各维度的长度相同。
a = np.array([1,2,3,4])
b = np.array([10,20,30,40])
c = a * b
print (c)
输出结果为:
[ 10 40 90 160]
当运算中的 2 个数组的形状不同时,numpy 将自动触发广播机制。如:
a = np.array([[ 0, 0, 0],
[10,10,10],
[20,20,20],
[30,30,30]])
b = np.array([1,2,3])
print(a + b)
输出结果为:
[[ 1 2 3]
[11 12 13]
[21 22 23]
[31 32 33]]
4x3 的二维数组与长为 3 的一维数组相加,等效于把数组 b 在二维上重复 4 次再运算:
0x10:迭代数组
NumPy 迭代器对象 numpy.nditer 提供了一种灵活访问一个或者多个数组元素的方式。
迭代器最基本的任务的可以完成对数组元素的访问。
接下来我们使用 arange() 函数创建一个 2X3 数组,并使用 nditer 对它进行迭代。
实例
a = np.arange(6).reshape(2,3)
print ('原始数组是:')
print (a)
print ('\n')
print ('迭代输出元素:')
for x in np.nditer(a):
print (x, end=", " )
print ('\n')
控制遍历顺序:
for x in np.nditer(a, order='F'):Fortran order,即是列序优先;
for x in np.nditer(a.T, order='C'):C order,即是行序优先;
修改数组中元素的值
nditer 对象有另一个可选参数 op_flags。 默认情况下,nditer 将视待迭代遍历的数组为只读对象(read-only),为了在遍历数组的同时,实现对数组元素值得修改,必须指定 read-write 或者 write-only 的模式。
实例
import numpy as np
a = np.arange(0,60,5)
a = a.reshape(3,4)
print ('原始数组是:')
print (a)
print ('\n')
for x in np.nditer(a, op_flags=['readwrite']):
x[...]=2*x
print ('修改后的数组是:')
print (a)
输出结果为:
原始数组是:
[[ 0 5 10 15]
[20 25 30 35]
[40 45 50 55]]
修改后的数组是:
[[ 0 10 20 30]
[ 40 50 60 70]
[ 80 90 100 110]]
0x11:数组操作
Numpy 中包含了一些函数用于处理数组,大概可分为以下几类:修改数组形状、翻转数组、修改数组维度、连接数组、分割数组、数组元素的添加与删除
numpy.reshape 函数可以在不改变数据的条件下修改形状
,格式如下: numpy.reshape(arr, newshape, order='C')
numpy.ndarray.flat 是一个数组元素迭代器
,实例如下:
import numpy as np
a = np.arange(9).reshape(3,3)
print ('原始数组:')
for row in a:
print (row)
# 对数组中每个元素都进行处理,可以使用flat属性,该属性是一个数组元素迭代器:
print ('迭代后的数组:')
for element in a.flat:
print (element)
输出结果如下:
原始数组:
[0 1 2]
[3 4 5]
[6 7 8]
迭代后的数组:
0
1
2
3
4
5
6
7
8
flat方法与前面nditer不同的是,nditer是numpy中的一个方法,且默认是只读对象,而flat方法是数组对象的方法。
numpy.ravel() 展平的数组元素
,顺序通常是"C风格",返回的是数组视图(view,有点类似 C/C++引用reference的意味),修改会影响原始数组。可以简单的理解成把多为数组转换成一维数组
该函数接收两个参数:
numpy.ravel(a, order='C')
numpy.transpose 函数用于对换数组的维度
,行变列,格式如下:
numpy.transpose(arr, axes)
参数说明:
arr:要操作的数组
axes:整数列表,对应维度,通常所有维度都会对换。
numpy.ndarray.T 类似 numpy.transpose
:列变行
numpy.swapaxes 函数用于交换数组的两个轴,格式如下:
numpy.swapaxes(arr, axis1, axis2)
arr:输入的数组
axis1:对应第一个轴的整数
axis2:对应第二个轴的整数
连接数组
|函数|描述|
|:--|:|
|concatenate|连接沿现有轴的数组序列|
|stack|沿着新的轴加入一系列数组|
|hstack|水平堆叠序列中的数组(列方向)|
|vstack|竖直堆叠序列中的数组(行方向)|
分割数组
|函数| |数组及操作|
|:|:|
|split| 将一个数组分割为多个子数组
|hsplit| 将一个数组水平分割为多个子数组(按列)
|vsplit |将一个数组垂直分割为多个子数组(按行)
数组元素的添加与删除
|函数 |元素及描述
|:|:|
|resize |返回指定形状的新数组
|append |将值添加到数组末尾
|insert |沿指定轴将值插入到指定下标之前
|delete |删掉某个轴的子数组,并返回删除后的新数组
|unique |查找数组内的唯一元素
0x12:numpy位运算
NumPy "bitwise_" 开头的函数是位运算函数。
NumPy 位运算包括以下几个函数:
|函数|描述
|:|:|
|bitwise_and|对数组元素执行位与操作
|bitwise_or |对数组元素执行位或操作
|invert |按位取反
|left_shift |向左移动二进制表示的位
|right_shift|向右移动二进制表示的位
0x13:numpy字符串函数
以下函数用于对 dtype 为 numpy.string_ 或 numpy.unicode_ 的数组执行向量化字符串操作。 它们基于 Python 内置库中的标准字符串函数。这些函数在字符数组类(numpy.char)中定义。
|函数 |描述
|:|
|add() |对两个数组的逐个字符串元素进行连接,元素之间进行映射
|multiply() |返回按元素多重连接后的字符串,把一个字符串返回多次
|center() |居中字符串,并使用指定字符在左侧和右侧进行填充。
|capitalize() |将字符串第一个字母转换为大写
|title() |将字符串的每个单词的第一个字母转换为大写
|lower() |对数组的每个元素转换为小写。它对每个元素调用 str.lower。
|upper() |函数对数组的每个元素转换为大写。它对每个元素调用 str.upper。
|split() |通过指定分隔符对字符串进行分割,并返回数组。默认情况下,分隔符为空格。
|splitlines() |函数以换行符作为分隔符来分割字符串,并返回数组。
|strip() |移除元素开头或者结尾处的特定字符
|join() |通过指定分隔符来连接数组中的元素
|replace() |使用新字符串替换字符串中的所有子字符串
|decode() |数组元素依次调用str.decode
|encode() |数组元素依次调用str.encode
0x14:numpy的数学计算
NumPy 包含大量的各种数学运算的函数,包括三角函数,算术运算的函数,复数处理函数等.
三角函数:NumPy 提供了标准的三角函数
:sin()、cos()、tan()。
numpy.around() 函数返回指定数字的四舍五入值
。
numpy.around(a,decimals)
参数说明:
a: 数组
decimals: 舍入的小数位数。 默认值为0。 如果为负,整数将四舍五入到小数点左侧的位置
numpy.floor() 返回数字的下舍整数。
numpy.ceil() 返回数字的上入整数。
0x15:numpy的算术函数
NumPy 算术函数包含简单的加减乘除: add(),subtract(),multiply() 和 divide()。
print ('两个数组相加:')
print (np.add(a,b))
print ('两个数组相减:')
print (np.subtract(a,b))
print ('两个数组相乘:')
print (np.multiply(a,b))
print ('两个数组相除:')
print (np.divide(a,b))
numpy.reciprocal() 函数返回参数逐元素的倒数
。如 1/4 倒数为 4/1。
a = np.array([0.25, 1.33, 1, 100])
print ('我们的数组是:')
print (a)
print ('\n')
print ('调用 reciprocal 函数:')
print (np.reciprocal(a))
numpy.power() 函数将第一个输入数组中的元素作为底数,计算它与第二个输入数组中相应元素的幂
。
numpy.mod() 计算输入数组中相应元素的相除后的余数。 函数 numpy.remainder() 也产生相同的结果。
参数是两个数组,第一个数组里的元素做被除数,返回一个余数组成的数组
0x16:numpy统计函数
NumPy 提供了很多统计函数,用于从数组中查找最小元素,最大元素,百分位标准差和方差等:
numpy.amin() 用于计算数组中的元素沿指定轴的最小值。1表示一行中最小,0表示一列中最小 空表示数组中最小
numpy.amax() 用于计算数组中的元素沿指定轴的最大值。
a = np.array([[3,7,5],[8,4,3],[2,4,9]])
print (a)
print (np.amin(a,1))
print (np.amin(a,0))
print (np.amax(a))
print (np.amax(a, axis = 0))
mpy.ptp()函数计算数组中元素最大值与最小值的差(最大值 - 最小值)
print ('调用 ptp() 函数:')
print (np.ptp(a))
print ('沿轴 1 调用 ptp() 函数:')
print (np.ptp(a, axis = 1))
print ('沿轴 0 调用 ptp() 函数:')
print (np.ptp(a, axis = 0))
numpy.median() 函数用于计算数组 a 中元素的中位数(中值):按行、列或整个数组计算
numpy.mean() 函数返回数组中元素的算术平均值:按行、列或整个数组计算
numpy.average() 函数根据在另一个数组中给出的各自的权重计算数组中元素的加权平均值。
0x17:numpy排序、条件筛选函数
排序算法:'quicksort'(快速排序) 'mergesort'(归并排序) 'heapsort'(堆排序)
numpy.sort() 函数
返回输入数组的排序副本。函数格式如下:
numpy.sort(a, axis, kind, order)
参数说明:
a: 要排序的数组
axis: 沿着它排序数组的轴,如果没有数组会被展开,沿着最后的轴排序, axis=0 按列排序,axis=1 按行排序
kind: 默认为'quicksort'(快速排序)
order: 如果数组包含字段,则是要排序的字段
numpy.argsort() 函数返回的是数组值从小到大的索引值。
numpy.argmax() 和 numpy.argmin()函数分别沿给定轴返回最大和最小元素的索引。
numpy.where() 函数返回输入数组中满足给定条件的元素的索引。
numpy.extract() 函数根据某个条件从数组中抽取元素,返回满条件的元素。
0x18:numpy矩阵库(matrix)
matlib.empty() 函数返回一个新的矩阵,语法格式为:
numpy.matlib.empty(shape, dtype, order)
参数说明:
shape: 定义新矩阵形状的整数或整数元组
Dtype: 可选,数据类型
order: C(行序优先) 或者 F(列序优先)
import numpy.matlib
import numpy as np
print (np.matlib.empty((2,2)))
- numpy.matlib.zeros() 函数创建一个以 0 填充的矩阵。
- numpy.matlib.ones()函数创建一个以 1 填充的矩阵。
- numpy.matlib.rand() 函数创建一个给定大小的矩阵,数据是随机填充的。
- numpy.matlib.identity() 函数返回给定大小的单位矩阵。单位矩阵是个方阵,从左上角到右下角的对角线(称为主对角线)上的元素均为 1,除此以外全都为 0。
numpy.matlib.eye() 函数返回一个矩阵,对角线元素为 1,其他位置为零。
numpy.matlib.eye(n, M,k, dtype)
参数说明:
n: 返回矩阵的行数
M: 返回矩阵的列数,默认为 n
k: 对角线的索引
dtype: 数据类型
实例:
import numpy.matlib
import numpy as np
print (np.matlib.eye(n = 3, M = 4, k = 0, dtype = float))
0x19:numpy线性代数
NumPy 提供了线性代数函数库 linalg,该库包含了线性代数所需的所有功能,可以看看下面的说明:
|函数 |描述
|:|
|dot |两个数组的点积,即元素对应相乘。
|vdot |两个向量的点积
|inner ||两个数组的内积
|matmul |两个数组的矩阵积
|determinant |数组的行列式
|solve |求解线性矩阵方程
|inv |计算矩阵的乘法逆矩阵
numpy 和 matplotlib
from matplotlib import pyqlot as plt
plt.title 图形标题
plt.xlable x轴标题
plt.ylable y轴标题
plt.plot(x, y) 画图
plt.show() 显示图
plt.hist
subplot() 函数
允许你在同一图中绘制不同的东西,就是说可以把一块画布分为若干个子画布,在子画布画不同的东西。子画布能分多少。取决于为子画布设置的高和宽。函数需要三个参数,第一个是子画布的高,第二个是子画布的宽,第三个是子画布的序号。子画布的实际高和宽是你设置高和宽的倒数,加入设置高为4,宽为2,那么子画布的实际高和宽就是整个画布的1/4 1/2,高和宽设置的越小,子画布分数量越多。所有子画布的高或宽不能超过1
bar() 函数来生成条形图:传入的两个数组元素数量必须相等,具有画图功能,代替上面的plt.plot
numpy.histogram() 函数是数据的频率分布的图形表示。 水平尺寸相等的矩形对应于类间隔,称为 bin,变量 height 对应于频率。
numpy.histogram()函数将输入数组和 bin 作为两个参数。 bin 数组中的连续元素用作每个 bin 的边界。
numpy库使用总结的更多相关文章
- 安装numpy库
1.先安装pip: 下载地址:http://pypi.python.org/pypi/pip#downloads 下载pip-8.1.2.tar.gz(md5,pgp)完成之后,解压到一个文件夹,cm ...
- Python的numpy库下的几个小函数的用法
numpy库是Python进行数据分析和矩阵运算的一个非常重要的库,可以说numpy让Python有了matlab的味道 本文主要介绍几个numpy库下的小函数. 1.mat函数 mat函数可以将目标 ...
- numpy库:常用基本
numpy 本文主要列出numpy模块常用方法 大部分内容来源于网络,而后经过自己的一点思考和总结,如果有侵权,请联系我 我是一名初学者,有哪些地方有错误请留言,我会及时更改的 创建矩阵(采用ndar ...
- Python数据分析numpy库
1.简介 Numpy库是进行数据分析的基础库,panda库就是基于Numpy库的,在计算多维数组与大型数组方面使用最广,还提供多个函数操作起来效率也高 2.Numpy库的安装 linux(Ubuntu ...
- 数据分析与展示——NumPy库入门
这是我学习北京理工大学嵩天老师的<Python数据分析与展示>课程的笔记.嵩老师的课程重点突出.层次分明,在这里特别感谢嵩老师的精彩讲解. NumPy库入门 数据的维度 维度是一组数据的组 ...
- 初识NumPy库-基本操作
ndarray(N-dimensional array)对象是整个numpy库的基础. 它有以下特点: 同质:数组元素的类型和大小相同 定量:数组元素数量是确定的 一.创建简单的数组: np.arra ...
- numpy库常用基本操作
NumPy数组的维数称为秩(rank),一维数组的秩为1,二维数组的秩为2,以此类推.在NumPy中,每一个线性的数组称为是一个轴(axes),秩其实是描述轴的数量.比如说,二维数组相当于是一个一维数 ...
- Numpy库(个人学习笔记)
一样,咱的计算机还是得先拥有Python,并且安装了Numpy库.有疑问的话可以看这里呦~~~~ 下面开讲: NumPy的主要对象是齐次多维数组.它是一个元素表(通常是数字),并且都是相同类型,由正整 ...
- Numpy库的下载及安装(吐血总结)
Python很火,我也下了个来耍耍一阵子.可是渐渐地,我已经不满足于它的基本库了,我把目光转到了Numpy~~~~~ 然而想法总是比现实容易,因为我之前下的是Python3.3.x,所有没有自带pip ...
- 简单记录numpy库的某些基本功能
这里介绍python的一个库,numpy库,这个库是机器学习,数据分析最经常用到的库之一,也是利用python做数据必须用到的一个库,入门机器学习学的第一个python库就是它了. 先对其导入到pyt ...
随机推荐
- application.yml 增加数据库连接,重启日志卡死
SpringBoot引入JPA,application.ymlapplication.yml增加数据库链接参数,启动卡死,日志没有动,如下图 折腾好久,后面发现用 Maven的package 过程中 ...
- flutter无线调试与打包
1.WIFI连接设备 设备打开开发者选项 -> 点击WIFI调试 -> 项目目录下输入终端命令: adb connect 设备ip地址:[端口号(一般是5555)] 2.apk打包 ...
- Fiddle用于移动端抓包
一.什么情况下可以用到 1.调查参考其他移动端网站的抓包,他们传输方式.如微信上京东的智能机器人的包.移动端的请求接口格式.如何实现的效果等. 2.调试本地移动端页面的测试页面效果是否有问题.如:页面 ...
- Beego orm 模型字段与数据库类型的对应
深度学习,ORM 推荐的对应数据库类型,在此列出,自动建表功能也会以此为标准.默认所有的字段都是 NOT NULL MySQL go mysql int, int32-设置auto或者名称为Id in ...
- python中,一个函数想使用另一个函数中的变量
问题: 第一个函数中用到了变量a:第二个函数也想使用变量a. 解决方法: 在第一个函数中将变量a定义为全局变量,然后在第二个函数中,也写上global a即可. 示例: def func1(): gl ...
- 2019 Multi-University Training Contest 9
A. Rikka with Quicksort 题意 求 EX 快速排序复杂度. 做法 根据线性期望可加性,独立考虑长度为 \(m\) 的区段对答案的贡献.进行简单的公式推导,对 \(s(x)=\su ...
- Gym 100851 Distance on Triangulation
题意:给你一个N边形, 然后这个n边形有n-3条边,然后询问2点之间的最短路. 题解:分治. 我们可以找到一条边,使得这幅图能分成大小相同的2幅图,那么我们就可以确定那些被分割开的询问的答案是多少了. ...
- codeforces 828 D. High Load(思维,水题)
题目链接:http://codeforces.com/contest/828/problem/D 题解:任意去一个点为根然后有几个k就是几个子叶也就是根结点有几个分支然后最好的解法就是贪心,将剩下的点 ...
- 杭电多校第九场 hdu6424 Rikka with Time Complexity 数学
Rikka with Time Complexity Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 524288/524288 K ( ...
- net core天马行空系列: 一个接口多个实现类,利用mixin技术通过自定义服务名,实现精准属性注入
系列目录 1.net core天马行空系列:原生DI+AOP实现spring boot注解式编程 2.net core天马行空系列: 泛型仓储和声明式事物实现最优雅的crud操作 哈哈哈哈,大家好,我 ...