numPy、Scipy、pandas、matplotlib简介
numpy——基础,以矩阵为基础的数学计算模块,纯数学存储和处理大型矩阵。 这个是很基础的扩展,其余的扩展都是以此为基础。****
scipy——数值计算库,在numPy库的基础上增加了众多的数学、科学以及工程计算中常用的库函数。 方便、易于使用、专为科学和工程设计的Python工具包.它包括统计,优化,整合,线性代数模块,傅里叶变换,信号和图像处理,常微分方程求解器等等。
pandas——数据分析,基于numPy 的一种工具,为了解决数据分析任务而创建的.Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。
matplotlib——绘图,对于图像美化方面比较完善,可以自定义线条的颜色和式样,可以在一张绘图纸上绘制多张小图,也可在一张图上绘制多条线,可以很方便的对数据进行可视化分析。
NumPy核心数据结构:ndarray
NumPy的数组类被称作ndarray。通常被称作数组。注意numpy.array和标准Python库类array.array并不相同,后者只处理一维数组和提供少量功能。
一种由相同类型的元素组成的多维数组,元素数量是事先给定好的
元素的数据类型由dtype(data-type)对象来指定,每个ndarray只有一种dtype类型
ndarray的大小固定,创建好数组后数组大小是不会再发生改变的
**
array函数:接收一个普通的python序列,并将其转换为ndarray
**
np.array([
[
[1,2,3],
[4,5,6]
],
[
[4,5,6],
[7,8,9]
]
])
array([[[1, 2, 3],
[4, 5, 6]],
[[4, 5, 6],
[7, 8, 9]]])
zeros函数:创建指定长度或者形状的全零数组。
np.zeros((3,3))
array([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
生成三行三列都是1的元素。
arange函数: 类似python的range函数,通过指定开始值、终值和步长来创建一个一维数组,注意:最终创建的数组不包含终值
np.arange(9)
array([0, 1, 2, 3, 4, 5, 6, 7, 8])
linspace函数:通过指定开始值、终值和元素个数来创建一个一维数组,数组的数据元素符合等差数列,可以通过endpoint关键字指定是否包含终值,默认包含终值
np.linspace(0,10,5)
array([ 0. , 2.5, 5. , 7.5, 10. ])
logspace函数:和linspace函数类似,不过创建的是等比数列数组
np.logspace(0,2,5)
random.randint,随机生成一个三行三列的矩阵
np.random.randint(1,9,size=(3,3))
array([[5, 1, 1],
[3, 3, 2],
[2, 8, 3]])
ndarray对象属性
对象属性
ndim 数组轴(维度)的个数,轴的个数被称作秩
**ndim 数组轴(维度)的个数,轴的个数被称作秩。
shape 数组的维度, 例如一个2排3列的矩阵,它的shape属性将是(2,3),这个元组的长度显然是秩,即维度或者ndim属性 。
size 数组元素的总个数,等于shape属性中元组元素的乘积。
dtype 一个用来描述数组中元素类型的对象,可以通过创造或指定dtype使用标准Python类型。不过NumPy提供它自己的数据类型。**
代码如下:
a=np.array([
[1,2,3],
[4,5,6],
[7,8,9]
])
print('数组的维度',a.ndim)
print('数组的形状',a.shape)
print('数组的元素类型',a.dtype)
print('数组的元素数量',a.size)
输出结果:
数组的维度 2
数组的形状 (3, 3)
数组的元素类型 int32
数组的元素数量 9
NumPy基本数据类型
ndarray形状的修改:
默认a是,一行。
a= np.arange(0,20,2)
print(a)
print(a.size)
输出:
[ 0 2 4 6 8 10 12 14 16 18]
10
现在把a改成两行的
b=a.reshape(2,5)
print(b)
[[ 0 2 4 6 8]
[10 12 14 16 18]]
修改b=a是浅拷贝,修改了a也等于修改了b
b[0][1]=100
print(a)
print(b)
输出结果:
[ 0 100 4 6 8 10 12 14 16 18]
[[ 0 100 4 6 8]
[ 10 12 14 16 18]]
数组与标量之间的运算
arr=np.arange(0,9).reshape(3,3)
print(arr+2)
输出结果:
[[ 2 3 4]
[ 5 6 7]
[ 8 9 10]]
dot()操作
arr1=np.array([
[1,2,3],
[4,5,6],
[7,8,9]
])
arr2=np.array([
[1,3,2],
[4,5,6],
[7,8,9]
])
print(arr1)
print(arr2)
print(np.dot(arr1,arr2))
[[1 2 3]
[4 5 6]
[7 8 9]]
[[1 3 2]
[4 5 6]
[7 8 9]]
[[ 30 37 41]
[ 66 85 92]
[102 133 143]]
矩阵的切片
二维数组的切片操作,和数组的切片操作类似。
例子如下:
arr2=np.array([[
[1,3,2],
[4,5,6],
[7,8,9]],
[
[1,2,3],
[4,5,6],
[7,8,9]
]
])
print(arr2)
print(arr2[1][1][0])
print(arr2[1,1,1])
print('这是切片操作',arr2[:,:,1])
输出操作:
[[[1 3 2]
[4 5 6]
[7 8 9]]
[[1 2 3]
[4 5 6]
[7 8 9]]]
4
5
这是切片操作 [[3 5 8]
[2 5 8]]
例子二:
arr2=np.array([[
[1,3,2,3],
[4,5,6,6],
[7,8,9,10]],
[
[1,2,3,4],
[4,5,6,8],
[7,8,9,30]
]
])
print('切片操作',arr2[:,:,1:3])
输出:
切片操作 [[[3 2]
[5 6]
[8 9]]
[[2 3]
[5 6]
[8 9]]]
arr2=np.array([[
[1,3,2,3],
[4,5,6,6],
[7,8,9,10]],
[
[1,2,3,4],
[4,5,6,8],
[7,8,9,30]
]
])
print('只要第一个维度的切片操作',arr2[0,:,1:3])
只要第一个维度的切片操作 [[3 2]
[5 6]
[8 9]]
ndarray花式索引
**指的是利用整数数组进行索引的方式。**
生成一个八行四列的数组,获取0 3 5 行的数据
arr = np.random.randint(1,9,size=(8,4))
arr
array([[6, 8, 3, 6],
[6, 4, 7, 6],
[4, 5, 1, 5],
[2, 8, 1, 5],
[5, 1, 6, 5],
[1, 1, 7, 3],
[3, 4, 5, 8],
[2, 8, 3, 2]])
#获取0 3 5 行数据。
print(arr[[0,3,5]])
[[6 8 3 6]
[2 8 1 5]
[1 1 7 3]]
获取0,0 3,3 5,2 行的数据
#获取0 3 5数据,0,0 3,3 5,2 行数据。
print(arr[[0,3,5],[0,3,2]])
索引器,是获取每一行的后边三个元素、
print(arr[np.ix_([0,3,5],[0,3,2])])
[[6 6 3]
[2 5 1]
[1 3 7]]
常用函数
abs, fabs计算整数、浮点数或者复数的绝对值,对于非复数,可以使用更快的fabs
随机生成一个数组,里面包含负数。用abs如下:
In [8]:
arr2=np.random.randint(-5,9,size=(3,3))
arr2
Out[8]:
array([[-5, 4, 8],
[ 1, 3, 7],
[ 4, 8, 5]])
In [9]:
np.abs(arr2)
Out[9]:
array([[5, 4, 8],
[1, 3, 7],
[4, 8, 5]])
sqrt 计算各个元素的平方根,相当于arr ** 0.5, 要求arr的每个元素必须是非负数
In [12]:
np.sqrt(arr1)
Out[12]:
array([[2.23606798, 2. , 2.82842712],
[1. , 1.73205081, 2.64575131],
[2. , 2.82842712, 2.23606798]])
square,函数计算各个元素的平方,相当于arr ** 2
np.square(arr1)
Out[13]:
array([[25, 16, 64],
[ 1, 9, 49],
[16, 64, 25]], dtype=int32)
计算各个元素的正负号: 1 正数,0:零,-1:负数sign函数
np.sign(arr1)
Out[14]:
array([[1, 1, 1],
[1, 1, 1],
[1, 1, 1]])
计算各个元素的ceiling值,即大于等于该值的最小整数,floor与之相反。
In [15]:
np.ceil(arr1)
Out[15]:
array([[5., 4., 8.],
[1., 3., 7.],
[4., 8., 5.]])
返回一个表示“那些值是NaN(不是一个数字)”的布尔类型数组sinan()
In [17]:
np.isnan(arr1)
Out[17]:
array([[False, False, False],
[False, False, False],
[False, False, False]])