pyhton numpy库的学习
1.Numpy核心数据结构:ndarray
ndarray是由同一种类型的元素组成的N维数组
1.1 ndarray的创建
主要有以下几个函数进行创建:
array()
zeros():全零数组
ones():全1数组
empty():创建未初始化的数组
1.1.1通过array()创建
(1)一维 a = np.array([1,2,3,4])
(2)二维
b = np.array([
[1,2,3,4],
[5,6,7,8]
])
(3)三维
c = np.array([
[
[1,2,3,4],
[5,6,7,8]
],
[
[9,10,11,12],
[13,14,15,16]
]
])
1.1.2通过zeros() ones() empty()创建
a = zeros((3,2))
array([[0., 0.], [0., 0.], [0., 0.]])
b = ones((3,2))
array([[1., 1.], [1., 1.], [1., 1.]])
c = np.empty((2,3,4))
array([[[ 7.15526851e-312, 6.22522714e-322, 2.12199579e-312, -1.68416096e-310], [ 7.15570007e-312, -4.47213389e-313, 7.15541423e-312, 8.20148972e-322], [ 0.00000000e+000, -1.73848404e-310, 7.15568433e-312, -4.47204282e-313]], [[ 7.15526851e-312, 6.66988622e-322, 2.12199579e-312, -1.79280714e-310], [ 0.00000000e+000, 4.47214284e-313, 7.15542855e-312, 8.25089629e-322], [ 0.00000000e+000, -1.84713021e-310, 0.00000000e+000, -4.47219864e-313]]])
1.1.3其他创建方式
(1)arange函数 区间,左闭右开
np.arange(20) #只写一个参数,默认起始值为0,步长为1
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,17, 18, 19])
np.arange(10,20) #写两个参数,起始值和终止值,默认步长为1
array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19])
np.arange(10,20,2) #写两个参数,起始值和终止值,步长
array([10, 12, 14, 16, 18])
(2)linspace函数 区间,全闭,参数:起始值、终止值、元素个数
np.linspace(0,10,5)
array([ 0. , 2.5, 5. , 7.5, 10. ])
(3)logspace函数 起始值以10为底,n次方,元素个数
np.logspace(0,2,5) #n为0到2的等比数列
array([1., 3.16227766, 10.,31.6227766 ,100.])
(4)随机数random()
np.random.random()
1.2 ndarray属性
1.3 ndarray修改形状
a = np.arange(0,20,2)
array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18])
a.reshape(2,-1) #修改数组形状,未知行数或列数使用-1表示
array([[ 0, 2, 4, 6, 8], [10, 12, 14, 16, 18]])
1.4 数组的乘法和矩阵的乘法
对应元素相乘:arr1 * arr2
矩阵的乘法(点积、数量积):
arr1.dot(arr2) 或者 np.dot(arr1,arr2)
1. 5 索引
1.5.1 多维数组的索引
a = np.array([ [ [1,2,3,4], [5,6,7,8] ], [ [9,10,11,12], [13,14,15,16] ], [ [8,5,6,2], [4,3,2,1] ] ])
a[1,1,3] #16
a[1][1][3] #16
a[1:2]
array([[[ 9, 10, 11, 12],
[13, 14, 15, 16]]])
a[1,1:3,1] #array([14])
1.5.2 布尔类型索引
利用布尔类型的数组进行据索引,最终返回结果是对应索引数组中数据为True位置的值。
1.5.3 花式索引
利用整数数组进行索引
arr = np.arange(32).reshape(8,4) arr array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11], [12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23], [24, 25, 26, 27], [28, 29, 30, 31]]) #获取第(0,0)、(3,3)、(5,2)这三个索引位置的数据 print(arr[[0,3,5],[0,3,2]]) [ 0 15 22] #获取第0、3、5行的第0、3、2列数据 arr[np.ix_([0,3,5],[0,3,2])] array([[ 0, 3, 2], [12, 15, 14], [20, 23, 22]])
1.6 数组转置 transpose()或T属性
1.7 ndarray常用函数
1.7.1聚合函数:mean max min std
1.7.2 np.where函数
where的三个参数,第一个是判断条件,第二个是为真时取值,第三是为假时取值
xarr = np.array([1,2,3,4,5]) yarr = np.array([-1,-2,8,9,10]) condition = xarr > yarr result = np.where(condition,xarr,yarr) result array([ 1, 2, 8, 9, 10])
arr = np.array([ [1,2,np.NaN,4], [4,5,6,np.NaN], [7,8,9,np.inf], [np.inf,np.e,np.pi,4] ]) condition = np.isnan(arr) | np.isinf(arr) result = np.where(condition,0,arr) result array([[1. , 2. , 0. , 4. ], [4. , 5. , 6. , 0. ], [7. , 8. , 9. , 0. ], [0. , 2.71828183, 3.14159265, 4. ]])
1.7.3 np.unique函数,去重
arr = np.array(['a','f','c','d','e','a','b']) for a in arr: print(a,end=" ") a b c d e a b arr2 = np.unique(arr) for a in arr2: print(a,end=" ") a b c d e f