python进阶(数据分析numpy库 一)
numpy——基础,以矩阵为基础的数学计算模块,纯数学存储和处理大型矩阵。 这个是很基础的扩展,其余的扩展都是以此为基础。
scipy——数值计算库,在numPy库的基础上增加了众多的数学、科学以及工程计算中常用的库函数。 方便、易于使用、专为科学和工程设计的Python工具包.它包括统计,优化,整合,线性代数模块,傅里叶变换,信号和图像处理,常微分方程求解器等等。
pandas——数据分析,基于numPy 的一种工具,为了解决数据分析任务而创建的.Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。
matplotlib——绘图,对于图像美化方面比较完可以自善,定义线条的颜色和式样,可以在一张绘图纸上绘制多张小图,也可在一张图上绘制多条线,可以很方便的对数据进行可视化分析。
- 本节英文词汇:axis 数轴、
一、numpy库的基本知识:
1、NumPy的数组类被称作ndarray。通常被称作n维数组。
2、ndarray只能有一种由相同类型的元素,元素的size一旦定义完成无法改变,但可以改变数组形状。
3、元素的数据类型由dtype(data-type)对象来指定,每个ndarray只有一种dtype类型:dtype = int32、dtype = float64
4、多维数组的0轴、1轴、2轴的理解方法:从最外层向里层递进。
二、ndarray创建:
1、通过内部array函数:numpy.array()
接收一个普通的python序列,并将其转换为ndarray,可以是多维tuple和list。
import numpy as np
list1 = [[1,2,3],[4,5,6],[7,8,9]]
tuple1 = ((1,2,3),(4,5,6),(7,8,'a'))
print(np.array([1,2,3,4,5]),type(np.array([1,2,3,4,5])))
print(np.array(list1))
print(np.array(tuple1),np.array(tuple1).dtype) 多维数组只有 一种数据类型。
#[1 2 3 4 5] <class 'numpy.ndarray'>
# [[1 2 3]
# [4 5 6]
# [7 8 9]]
# [['1' '2' '3']
# ['4' '5' '6']
# ['7' '8' 'a']] <U11
2、通过内部函数:zeros()、ones()、empty()
该函数可以创建一维和多维数组。
import numpy as np
print(np.zeros(8)) 一个数字 相当于 1*8的数组
print(np.zeros((4,2))) 创建一个 4*2 的数组
[ 0. 0. 0. 0. 0. 0. 0. 0.]
[[ 0. 0.]
[ 0. 0.]
[ 0. 0.]
[ 0. 0.]]
import numpy as np
print(np.ones(8))
print(np.ones((4,2)))
[ 1. 1. 1. 1. 1. 1. 1. 1.]
[[ 1. 1.]
[ 1. 1.]
[ 1. 1.]
[ 1. 1.]]
import numpy as np
print(np.empty(8)) # 创建未初始化的数组
print(np.empty((4,2)))
[ 1. 1. 1. 1. 1. 1. 1. 1.]
[[ 1. 1.]
[ 1. 1.]
[ 1. 1.]
[ 1. 1.]]
import numpy as np
help(np.dtype) # 查看方法的用法
3、内部函数 arange()、linspace、logspace():
此三个函数只能创建一维数组,如果想要多维数组可以通过 reshape()函数更改维度。
(1)创建等差数列:一维数组
import numpy as np
print(np.arange(1,20,2)) # 只能创建一维数组 ,前闭后开 区间 ,等差数组
import numpy as np
print(np.linspace(1,20,11,endpoint=False)) # 11值得是元素个数,等差数列,可以通过endpoint来控制是否包含终值,默认是闭区间。
(2)等比数组:一维数组
import numpy as np
print(np.logspace(1, 2, 5)) # 5是元素个数,等比数列,默认base = 10.0 为底, 闭区间
# [ 10. 17.7827941 31.6227766 56.23413252 100. ]
help(np.logspace)
4、即使用numpy.random中的random()、randn()、randint()函数:
此三个函数可以创建多维数组。
(1)numpy.random.random():
可以创建多维数组,元素用0-1的float填充。
import numpy as np # 填充数字 为 0-1 的浮点型
print(np.random.random(4))
print(np.random.random((3,4,5))) 三维数组,维度用()括起来。
(2)numpy.random.randn():
import numpy as np
arr1 = np.random.randn(3,2) 返回一个样本的标准正态分布 ,这里的多维不需要加 小()。
arr2 = np.random.randn(3,2,4)
print(arr1)
print(arr2)
(3)numpy.random.randint():
区间:前闭后开,python中random模块中randint 是区间。
print(np.random.randint(1,9,(3,4))) 随机 整数 多维数组 ,整数可以自定义
print(np.random.randint(1,9,size=(3,4))) 关键字参数传送,结果相同
(4) numpy.random.rand():内部不需要小 (),填充值 0 - 1 的 float:
print(np.random.rand(3,4))
array([[0.69570197, 0.83366018, 0.4209347 , 0.61494205],
[0.10000352, 0.06254728, 0.52734986, 0.35841483],
[0.71014369, 0.20743027, 0.53953882, 0.13875083]])
三、ndarray的属性查看:
1、创建ndarray时,可以通过dtype指定数据类型:
int 默认为 32位 ,float默认为64位,即int32、float64。
import numpy as np
arr1 = np.random.randint(1,9,(3,4),dtype= "int64")
arr2 = np.random.random((3,4,5,)).dtype
print(arr1.dtype,arr2)
2、ndarray创建后数据类型更改:对象.astype(‘ ’)
arr1 = np.array([1,2,3,4],dtype='int32')
print(arr1.dtype)
arr2 = arr1.astype(float) 注意: 1、这里不加 “” 2、需要用新的数组接收,原数组类型不变。
print(arr2.dtype,arr1.dtype)
3、常用的numpy的数据类型:
arr1 = np.array([1,2,3,4,0],dtype='bool_')
print(arr1) # [ True True True True False]
实例:
四、ndarray数组改变形状:
① 注意ndarray修改shape与 数组 转置的区别。
②修改数组形状时一定要保持数组元素个数(即size)不变。
1、利用shape属性赋值来改变:
import numpy as np
arr1 = np.random.randint(1,9,(3,4))
arr1.shape = (2,3,2) 修改了原数组的shape,接收的是元组, 小()不要忘记
print(arr1)
2、利用内部函数reshape():
import numpy as np
arr1 = np.random.randint(1,9,(3,4))
arr2 = arr1.reshape(2,3,2) 这里面不需要加小(),生成了新的数组。
print(arr2)
print(arr1) 旧数组的shape不变
arr2[0,2,0] = 1000
print(arr1)
print(arr2) 但是新旧数共用一个内存空间,改变一个数字元素,另一个数组也会改变,类似于list浅拷贝。
六、numpy的基本操作:
1、数组与标量、数组之间的算数运算:
(1)数组间算数运算(非矩阵积)的特性:
数组不用循环即可对每个元素执行批量的算术运算操作,这个过程叫做矢量化,即用数组表达式代替循环的做法。矢量化数组运算性能比纯Python方式快上一两个数据级。
大小相等的两个数组之间的任何算术运算都会将其运算应用到元素级上的操作。
(2)数组间算数运算的过程:
① 元素级操作:在NumPy中,大小相等的数组之间的运算,为元素级运算,即只用于位置相同的元素之间,所得的运算结果组成一个新的数组,运算结果的位置跟操作数位置相同。
② 注意 数组 * 数组 与 数组 矩阵积的区别
(3)例题与代码:
①数组与标量:
import numpy as np
arr1 = np.array([1,2,3,4,5,6,7,8])
print(arr1/2.0)
print(1.0/arr1)
print(arr1**2)
print(2**arr1)
②数组与数组之间:
大小相等的数组之间的算数运算
(3)数组的广播:
数组中需要有一个 单行数组,且列数与另一个数组相同。
import numpy as np
arr1 = np.array([1,1,1,1])
arr2 = np.array([[1,2,3,4],
[4,5,6,7],
[7,8,9,10]])
print(arr1+arr2)
[[ 2 3 4 5]
[ 5 6 7 8]
[ 8 9 10 11]]
2、ndarray数组的矩阵积:
矩阵积(matrix product):两个二维矩阵(行和列的矩阵)满足第一个矩阵的列数与第二个矩阵的行数相同,那么可以进行矩阵的乘法,即矩阵积,矩阵积不是元素级的运算。也称为点积、数量积。 Arr1.dot(arr2)
得到的新矩阵:行数由第一个矩阵行数决定,列数由第二个矩阵列数决定。
实例:
七、多维数组的索引与切片:
1、索引:
import numpy as np
arr1 = np.random.randint(1,9,(3,4,5))
print(arr1)
print(arr1[1,1,3]) 索引 也可以用 arr1[1][1][3]
2、ndarray切片:
https://mp.csdn.net/postedit/84287384