浅谈numpy库的常用基本操作方法


Posted in Python onJanuary 09, 2018

NumPy数组的维数称为秩(rank),一维数组的秩为1,二维数组的秩为2,以此类推。在NumPy中,每一个线性的数组称为是一个轴(axes),秩其实是描述轴的数量。比如说,二维数组相当于是一个一维数组,而这个一维数组中每个元素又是一个一维数组。所以这个一维数组就是NumPy中的轴(axes),而轴的数量——秩,就是数组的维数。

1、创建矩阵

Numpy库中的矩阵模块为ndarray对象,有很多属性:T,data, dtype,flags,flat,imag,real,size,

itemsize,nbytes,ndim,shape,strides,ctypes,base等等。

1.1采用ndarray对象

import numpy as np #引入numpy库
#创建一维的narray对象
a = np.array([1,2,3,4,5])
#创建二维的narray对象
a2 = np.array([[1,2,3,4,5],[6,7,8,9,10]])
#创建多维对象以其类推

1.2通过函数创建矩阵

1.2.1 arange

import numpy as np
a = np.arange(10) # 默认从0开始到10(不包括10),步长为1
print(a) # 返回 [0 1 2 3 4 5 6 7 8 9]
a1 = np.arange(5,10) # 从5开始到10(不包括10),步长为1
print(a1) # 返回 [5 6 7 8 9]
a2 = np.arange(5,20,2) # 从5开始到20(不包括20),步长为2
print(a2) # 返回 [ 5 7 9 11 13 15 17 19]

1.2.2 linspace

linspace()和matlab的linspace很类似,用于创建指定数量等间隔的序列,实际生成一个等差数列。

import numpy as np
a = np.linspace(0,10,5) # 生成首位是0,末位是10,含5个数的等差数列
print(a)

1.2.3 logspace

linspace用于生成等差数列,而logspace用于生成等比数列。

下面的例子用于生成首位是100,末位是102,含5个数的等比数列

import numpy as np
a = np.logspace(0,2,5)
print(a)

1.2.4 ones,zeros,eye,empty

ones创建全1矩阵
zeros创建全0矩阵
eye创建单位矩阵
empty创建空矩阵(实际有值)

import numpy as np
a_ones = np.ones((3,4)) # 创建3*4的全1矩阵
print(a_ones)
# 结果
[[ 1. 1. 1. 1.]
 [ 1. 1. 1. 1.]
 [ 1. 1. 1. 1.]]
a_zeros = np.zeros((3,4)) # 创建3*4的全0矩阵
print(a_zeros)
# 结果
[[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]]
a_eye = np.eye(3) # 创建3阶单位矩阵
print(a_eye)
# 结果
[ 1. 0. 0.]
[ 0. 1. 0.]
[ 0. 0. 1.]]
a_empty = np.empty((3,4)) # 创建3*4的空矩阵 
print(a_empty)
# 结果
[[ 1.78006111e-306 -3.13259416e-294 4.71524461e-309 1.94927842e+289]
[ 2.10230387e-309 5.42870216e+294 6.73606381e-310 3.82265219e-297]
[ 6.24242356e-309 1.07034394e-296 2.12687797e+183 6.88703165e-315]]

1.2.5 fromstring

fromstring()方法可以将字符串转化成ndarray对象,需要将字符串数字化时这个方法比较有用,可以获得字符串的ascii码序列。

a = "abcdef"
b = np.fromstring(a,dtype=np.int8) # 因为一个字符为8位,所以指定dtype为np.int8
print(b) # 返回 [ 97 98 99 100 101 102]

1.2.6 fromfunction

fromfunction()方法可以根据矩阵的行号列号生成矩阵的元素。

例如创建一个矩阵,矩阵中的每个元素都为行号和列号的和。

import numpy as np
def func(i,j): 
 return i+j
a = np.fromfunction(func,(5,6)) 
# 第一个参数为指定函数,第二个参数为列表list或元组tuple,说明矩阵的大小
print(a)
# 返回
[[ 0. 1. 2. 3. 4. 5.]
[ 1. 2. 3. 4. 5. 6.]
[ 2. 3. 4. 5. 6. 7.]
[ 3. 4. 5. 6. 7. 8.]
[ 4. 5. 6. 7. 8. 9.]]
#注意这里行号的列号都是从0开始的

2.矩阵的操作

numpy中的ndarray对象重载了许多运算符,使用这些运算符可以完成矩阵间对应元素的运算。

如 +,-,*,/,%,**

2.1矩阵函数操作

2.1.1 常用数学运算(导入numpy模块:import numpy as np)

矩阵函数 说明
np.sin(a) 对矩阵a中每个元素取正弦,sin(x)
np.cos(a) 对矩阵a中每个元素取余弦,cos(x)
np.tan(a) 对矩阵a中每个元素取正切,tan(x)
np.arcsin(a) 对矩阵a中每个元素取反正弦,arcsin(x)
np.arccos(a) 对矩阵a中每个元素取反余弦,arccos(x)
np.arctan(a) 对矩阵a中每个元素取反正切,arctan(x)
np.exp(a) 对矩阵a中每个元素取指数函数,ex
np.sqrt(a) 对矩阵a中每个元素开根号√x

如:求矩阵每个元素的sin值

import numpy as np
array=np.array([[1,2,3],
        [4,5,6]])
print(np.sin(array))
#结果
# [[ 0.84147098 0.90929743 0.14112001]
# [-0.7568025 -0.95892427 -0.2794155 ]]

2.1.2矩阵乘法(点乘)

矩阵乘法必须满足矩阵乘法的条件,即第一个矩阵的列数等于第二个矩阵的行数。

矩阵乘法的函数为 dot

import numpy as np
a1 = np.array([[1,2,3],[4,5,6]]) # a1为2*3矩阵
a2 = np.array([[1,2],[3,4],[5,6]]) # a2为3*2矩阵
print(a1.shape[1]==a2.shape[0]) # True, 满足矩阵乘法条件
print(a1.dot(a2)) 
# a1.dot(a2)相当于matlab中的a1*a2
# 而python中的a1*a2相当于matlab中的a1.*a2
# 结果
[[22 28]
[49 64]]

2.1.3矩阵的转置(transpose或T)

import numpy as np
array=np.array([[1,2,3],
        [4,5,6]])
print(array.transpose())#或np.transpose(array)
print(array.T)
# 结果
# [[1 4]
# [2 5]
# [3 6]]
#      transpose与T效果一样
# [[1 4]
# [2 5]
# [3 6]]

2.1.4矩阵的逆

求矩阵的逆需要先导入numpy.linalg,用linalg的inv函数来求逆。

矩阵求逆的条件是矩阵的行数和列数相同。

import numpy as np
import numpy.linalg as lg
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(lg.inv(a))
# 结果
[[ -4.50359963e+15  9.00719925e+15 -4.50359963e+15]
 [ 9.00719925e+15 -1.80143985e+16  9.00719925e+15]
[ -4.50359963e+15  9.00719925e+15 -4.50359963e+15]]
a = np.eye(3) # 3阶单位矩阵
print(lg.inv(a)) # 单位矩阵的逆为他本身
# 结果
[[ 1. 0. 0.]
[ 0. 1. 0.]
[ 0. 0. 1.]]

2.1.5最大值最小值

获得矩阵中元素最大最小值的函数分别是max和min,可以获得整个矩阵、行或列的最大最小值。

import numpy as np
array=np.array([[1,2,3],
        [4,5,6]])
print(array.max())#结果为6
print(array.min())#结果为1
#同时还可以指定axis关键字,获取行或列的最大、最小值
print(array.max(axis=0)) #x轴最大值,0,1分别代表行列

2.1.6平均值

获得矩阵中元素的平均值可以通过函数mean()或average()。同样地,可以获得整个矩阵、行或列的平均值

import numpy as np
array=np.array([[1,2,3],
        [4,5,6]])
print(array.mean())#结果为3.5
print(np.average(array))#结果为3.5
print(array.mean(axis=0))#行方向的平均值,同样,0,1代表维度

2.1.7方差

方差的函数为var(),方差函数var()相当于函数mean(abs(x - x.mean())**2),其中x为矩阵。

import numpy as np
array=np.array([[1,2,3],
        [4,5,6]])
print(array.var())#结果为2.91666666667
#同样可通过axis指定维度0,1分别代表行列,
print(array.var(axis=0))
# 结果
# [ 2.25 2.25 2.25]

2.1.8标准差

标准差的函数为std()。

std()相当于sqrt(mean(abs(x - x.mean())**2)),或相当于sqrt(x.var())。

import numpy as np
array=np.array([[1,2,3],
        [4,5,6]])
print(array.std())#结果为1.70782512766
#同样可通过axis指定维度0,1分别代表行列,
print(array.std(axis=0))
# 结果
# [ 1.5 1.5 1.5]

2.1.9中位数or中值

中值指的是将序列按大小顺序排列后,排在中间的那个值,如果有偶数个数,则是排在中间两个数的平均值。

例如序列[5,2,6,4,2],按大小顺序排成 [2,2,4,5,6],排在中间的数是4,所以这个序列的中值是4。

又如序列[5,2,6,4,3,2],按大小顺序排成 [2,2,3,4,5,6],因为有偶数个数,排在中间两个数是3、4,所以这个序列中值是3.5。

中值的函数是median(),调用方法为numpy.median(x,[axis]),axis可指定轴方向,默认axis=None,对所有数去中值

import numpy as np
array=np.array([[1,2,3],
        [4,5,6]])
print(np.median(array))#结果:3.5
#指定维度
print(np.median(array,axis=0))
#结果
# [ 2.5 3.5 4.5]

2.1.10 求和

矩阵求和的函数是sum(),可以对行,列,或整个矩阵求和

import numpy as np
array=np.array([[1,2,3],
        [4,5,6]])
print(array.sum())#结果:21
#指定维度
print(array.sum(axis=0))
#结果
# [5 7 9]

2.1.11 累计和或累加

某位置累积和指的是该位置之前(包括该位置)所有元素的和。

例如序列[1,2,3,4,5],其累计和为[1,3,6,10,15],即第一个元素为1,第二个元素为1+2=3,……,第五个元素为1+2+3+4+5=15。

矩阵求累积和的函数是cumsum(),可以对行,列,或整个矩阵求累积和。

import numpy as np
a = np.array([[1,2,3],[4,5,6]])
print(a.cumsum())      # 对整个矩阵求累积和
# 结果 [ 1 3 6 10 15 21]
print(a.cumsum(axis=0)) # 对行方向求累积和
# 结果
[[1 2 3]
[5 7 9]]
print(a.cumsum(axis=1)) # 对列方向求累积和
# 结果
[[ 1 3 6]
[ 4 9 15]]

2.2矩阵的截取

2.2.1 按行列截取

矩阵的截取和list相同,可以通过[](方括号)来截取

import numpy as np
a = np.array([[1,2,3,4,5],[6,7,8,9,10]])
print(a[0:1]) #截取第一行,返回 [[1 2 3 4 5]]
print(a[1,2:5]) #截取第二行,第三、四、五列,返回 [8 9 10]
print(a[1,:]) #截取第二行,返回 [ 6 7 8 9 10]

2.2.2按条件截取

import numpy as np
a = np.array([[1,2,3,4,5],[6,7,8,9,10]])
b = a[a>6] # 截取矩阵a中大于6的元素,范围的是一维数组
print(b) # 返回 [ 7 8 9 10]
# 其实布尔语句首先生成一个布尔矩阵,将布尔矩阵传入[](方括号)实现截取
print(a>6) 
# 返回
[[False False False False False]
[False True True True True]]

按条件截取应用较多的是对矩阵中满足一定条件的元素变成特定的值。

例如将矩阵中大于6的元素变成0。

import numpy as np
a = np.array([[1,2,3,4,5],[6,7,8,9,10]])
print(a)
#开始矩阵为
[[ 1 2 3 4 5]
 [ 6 7 8 9 10]]
a[a>6] = 0
print(a)
#大于6清零后矩阵为
[[1 2 3 4 5]
[6 0 0 0 0]]

2.2.3 clip截取

clip(矩阵,min,max)#返回值:所有小于min的值都等于min,所有大于max的值都等于max

import numpy as np
array=np.array([[1,2,3],
        [4,5,6]])
print(array.clip(2,4))
#结果
# [[2 2 3]
# [4 4 4]]

2.3 矩阵的合并

矩阵的合并可以通过numpy中的hstack方法和vstack方法实现

import numpy as np
a1 = np.array([[1,2],[3,4]])
a2 = np.array([[5,6],[7,8]])
#!注意 参数传入时要以列表list或元组tuple的形式传入
print(np.hstack([a1,a2])) 
#横向合并,返回结果如下 
[[1 2 5 6]
[3 4 7 8]]
print(np.vstack((a1,a2)))
#纵向合并,返回结果如下
[[1 2]
[3 4]
[5 6]
[7 8]]

矩阵的合并也可以通过concatenatef方法。

np.concatenate( (a1,a2), axis=0 ) 等价于 np.vstack( (a1,a2) )

np.concatenate( (a1,a2), axis=1 ) 等价于 np.hstack( (a1,a2) )

以上这篇浅谈numpy库的常用基本操作方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python list 合并连接字符串的方法
Mar 09 Python
下载给定网页上图片的方法
Feb 18 Python
python实现爬虫统计学校BBS男女比例之数据处理(三)
Dec 31 Python
Python递归实现汉诺塔算法示例
Mar 19 Python
python list元素为tuple时的排序方法
Apr 18 Python
matplotlib subplots 调整子图间矩的实例
May 25 Python
Django Admin实现三级联动的示例代码(省市区)
Jun 22 Python
Django数据库连接丢失问题的解决方法
Dec 29 Python
python 定时器,实现每天凌晨3点执行的方法
Feb 20 Python
谈一谈基于python的面向对象编程基础
May 21 Python
Django配置Bootstrap, js实现过程详解
Oct 13 Python
Python面试不修改数组找出重复的数字
May 20 Python
基于Python中单例模式的几种实现方式及优化详解
Jan 09 #Python
浅谈Python2获取中文文件名的编码问题
Jan 09 #Python
在CentOS6上安装Python2.7的解决方法
Jan 09 #Python
浅谈Matplotlib简介和pyplot的简单使用——文本标注和箭头
Jan 09 #Python
用tensorflow实现弹性网络回归算法
Jan 09 #Python
Python+matplotlib实现计算两个信号的交叉谱密度实例
Jan 08 #Python
python matplotlib 注释文本箭头简单代码示例
Jan 08 #Python
You might like
phpMyAdmin 链接表的附加功能尚未激活的问题
2010/08/01 PHP
ThinkPHP之R方法实例详解
2014/06/20 PHP
PHP四舍五入、取整、round函数使用示例
2015/02/06 PHP
PHP面向对象之里氏替换原则简单示例
2018/04/08 PHP
Thinkphp集成抖音SDK的实现方法
2020/04/28 PHP
基于javascript滚动图片具体实现
2013/11/18 Javascript
js阻止冒泡及jquery阻止事件冒泡示例介绍
2013/11/19 Javascript
jquery实现的导航固定效果
2014/04/28 Javascript
深入剖析JavaScript中的函数currying柯里化
2016/04/29 Javascript
jQuery限制图片大小的方法
2016/05/25 Javascript
AngularJS 表达式详解及实例代码
2016/09/14 Javascript
JavaScript制作颜色反转小游戏
2016/09/25 Javascript
兼容浏览器的js事件绑定函数(详解)
2017/05/09 Javascript
JavaScript通过filereader接口读取文件
2017/05/10 Javascript
JavaScript定义及输出螺旋矩阵的方法详解
2017/12/01 Javascript
JS实现简单获取最近7天和最近3天日期的方法
2018/04/18 Javascript
小程序自定义日历效果
2018/12/29 Javascript
使用vue实现通过变量动态拼接url
2020/07/22 Javascript
vue实现简单的登录弹出框
2020/10/26 Javascript
基于python中的TCP及UDP(详解)
2017/11/06 Python
Python网络编程使用select实现socket全双工异步通信功能示例
2018/04/09 Python
python 2.7.13 安装配置方法图文教程
2018/09/18 Python
详解python列表生成式和列表生成式器区别
2019/03/27 Python
详解Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果
2019/05/07 Python
Keras 加载已经训练好的模型进行预测操作
2020/06/17 Python
django restframework serializer 增加自定义字段操作
2020/07/15 Python
电气自动化大学生求职信
2013/10/16 职场文书
企业门卫岗位职责
2013/12/12 职场文书
写自荐信三大法宝
2014/01/24 职场文书
四年大学自我鉴定
2014/02/17 职场文书
高三学习决心书
2014/03/11 职场文书
2014年社区党建工作总结
2014/11/11 职场文书
统计员岗位职责
2015/02/11 职场文书
2015大学迎新晚会策划书
2015/07/16 职场文书
vue动态绑定style样式
2022/04/20 Vue.js
python使用BeautifulSoup 解析HTML
2022/04/24 Python