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