NumPy的基本使用及测试
Numpy简要
介绍
NumPy是Python中的科学计算的基础包,不是Python的标准库,是第三方包。
提供对象
NumPy提供了两种对象:ndarray和ufunc。
ndarray是储存单一数据类型的多维数组。
ufunc是能够对数组进行处理的函数。
功能
- N维数组,一种快速,高效使用内存的多维数组,提供矢量化数学计算。
- 不需要使用循环,就能对整个数组内数组进行标准数学运算。
- 线性代数,随机数生成以及傅里叶变换等功能。
- 可以方便把数据传送到其他外部库,也便于(例如C,C++编写的)外部库以NumPy数组形式返回。
注意NumPy本身不提供高级数据分析功能,可以使用Pandas之类的工具。
Numpy使用
创建NumPy数组
数组建立
这里建立一个一维数组,当然也可以建立多维数组。
#导入NumPy包,别名np
import numpy as np
#array()函数创建ndarray数组
a=np.array([2,4,6])
print(a)
输出一维数组:
[2 4 6]
数组元素定义复数
a=np.array([3,4,6],dtype=complex)
输出的一维数组
[3.+0.j 4.+0.j 6.+0.j]
NumPy特殊数组
NumPy有3种特殊数组:zero数组;ones数组;empty数组。
zero数组
zero数组是全0的数组,一般用于初始化步骤。
数组默认类型是浮点数,可以指定为整数,同时支持多维数组生成。
#导入NumPy包,别名np
import numpy as np
#一维
a=np.zeros(3)
#类型默认为浮点数,可以定义为整型
b=np.zeros(3,dtype=int)
#多维数组
c=np.zeros((3,2),dtype=int)
print(a)
print(b)
print(c)
输出结果:
[0. 0. 0.]
[0 0 0]
[[0 0]
[0 0]
[0 0]]
ones数组
ones数组是全1的数组。
数组默认类型是浮点数,可以指定为整数,同时支持多维数组生成。
#导入NumPy包,别名np
import numpy as np
#一维
a=np.ones(3)
#类型默认为浮点数,可以定义为整型
b=np.ones(3,dtype=int)
#多维数组
c=np.ones((3,2),dtype=int)
print(a)
print(b)
print(c)
输出结果:
[1. 1. 1.]
[1 1 1]
[[1 1]
[1 1]
[1 1]]
empty数组
empty数组是指空数组,即数组中所有元素全部近似等于0。
#导入NumPy包,别名np
import numpy as np
a=np.empty((2,3))
print(a)
输出结果:
[[6.23042070e-307 3.56043053e-307 1.37961641e-306]
[1.11261027e-306 1.69120009e-306 7.23188049e-308]]
NumPy序列数组
NumPy的arange函数与Python的range函数功能类似。参数都是开始值,结束值和步长。不过相较于Python的range,NumPy的步长可以为浮点数。
#导入NumPy包,别名np
import numpy as np
a=np.arange(1,20,5)
b=np.arange(1.1,20,2.4)
print(a)
print(b)
输出结果:
[ 1 6 11 16]
[ 1.1 3.5 5.9 8.3 10.7 13.1 15.5 17.9]
linspace函数可以快速创建等差序列数组。其参数为开始值,结束值,元素数量。
#导入NumPy包,别名np
import numpy as np
#生成1-10,数量一共5个
a=np.linspace(1,10,5)
print(a)
输出结果:
[ 1. 3.25 5.5 7.75 10. ]
NumPy数组索引
NumPy数组的每个,每行,每列元素都可以用索引访问。
注意索引值从0开始。
首先定义一个多维数组
#导入NumPy包,别名np
import numpy as np
a=np.array([[1,2,3],[4,5,6]])
print(a)
输出结果:
[[1 2 3]
[4 5 6]]
开始查询
#导入NumPy包,别名np
import numpy as np
a=np.array([[1,2,3],[4,5,6]])
#第一个元素
a1=a[0]
#[1 2 3]
#第二个元素
a2=a[1]
#[4 5 6]
#第1行第2列里面的元素
a3=a[0,1]
#2
#第二列元素
a4=a[:,1]
#[2 5]
#第二行元素
a5=a[1,:]
#[4 5 6]
print(a1)
print(a2)
print(a3)
print(a4)
print(a5)
输出结果:
[1 2 3]
[4 5 6]
2
[2 5]
[4 5 6]
NumPy数组运算
NumPy数组元素的加,减,乘,除,乘方,最大值,最小值等运算。
#导入NumPy包,别名np
import numpy as np
a=np.array([1,2,3])
b=np.array([4,5,6])
#加法
a1=a+b
#[5 7 9]
#减法
a2=a-b
#[-3 -3 -3]
#乘法
a3=a*b
#[ 4 10 18]
#除法
a4=a/b
#[0.25 0.4 0.5 ]
#乘方
a5=a**2
#[1 4 9]
#判断
a6=a>b
#[False False False]
a7=a<b
#[ True True True]
#最大值
a8=a.max()
#3
#最小值
a9=a.min()
#1
print(a1)
print(a2)
print(a3)
print(a4)
print(a5)
print(a6)
print(a7)
print(a8)
print(a9)
输出结果:
[5 7 9]
[-3 -3 -3]
[ 4 10 18]
[0.25 0.4 0.5 ]
[1 4 9]
[False False False]
[ True True True]
3
1
NumPy数组复制
复制分为两种——浅复制和深复制。
浅复制,修改任何一个都会改变。
#导入NumPy包,别名np
import numpy as np
a=np.array([1,2,3])
b=a
print(a)
print(b)
#[1 2 3]
#[1 2 3]
#仅修改b里面的值,输出的a里面的值也变了
#具体的原因是因为两者的地址是一样的
b[1]=10
print(a)
print(b)
#[ 1 10 3]
#[ 1 10 3]
输出结果:
[1 2 3]
[1 2 3]
[ 1 10 3]
[ 1 10 3]
深复制,修改其中一个另一个不会改变。函数copy()。
#导入NumPy包,别名np
import numpy as np
a=np.array([1,2,3])
b=a.copy()
print(a)
print(b)
#[1 2 3]
#[1 2 3]
#仅修改b里面的值,输出的a里面的值没变
#具体的原因是因为两者的地址分开存放
b[1]=10
print(a)
print(b)
#[ 1 2 3]
#[ 1 10 3]
NumPy矩阵
矩阵用matrix()函数创建。
#导入NumPy包,别名np
import numpy as np
a=np.matrix([[1,2,3],[4,5,6]])
print(a)
#矩阵转置
b=a.T
print(b)
#矩阵相乘
c=a*b
print(c)
矩阵求逆
d=a.I
print(d)
输出结果:
[[1 2 3]
[4 5 6]]
[[1 4]
[2 5]
[3 6]]
[[14 32]
[32 77]]
[[-0.94444444 0.44444444]
[-0.11111111 0.11111111]
[ 0.72222222 -0.22222222]]