Numpy是一个用python实现的科学计算的扩展程序库,包括:
import numpy as np #导入numpy工具包
data = np.arange(12).reshape(3,4)
data
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
type(data)
numpy.ndarray
data.ndim #数组维度个数,输出结果为2,表示二维数组
2
data.shape #数组的维度,输出结果(3,4)表示3行4列
(3, 4)
data.size #数组元素的个数,输出结果12,表示总共有12个元素
12
data.dtype #数组元素的类型,输出结果dtype('int32'),表示元素类型是int32
dtype(‘int32’)
data1 = np.array([1,2,3]) #创建一个一维数组
data1
array([1, 2, 3])
data2 = np.array([[1,2,3],[4,5,6]]) #创建一个二维数组
data2
array([[1, 2, 3],
[4, 5, 6]])
np.zeros((3,4)) #创建一个全0数组
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
np.ones((3,4)) #船舰一个全1数组
array([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])
np.empty((5,2)) #创建全空数组,其实每个值都是接近于0的数
array([[6.23042070e-307, 1.89146896e-307],
[1.37961302e-306, 7.56593017e-307],
[1.33511290e-306, 1.78018403e-306],
[1.95821439e-306, 8.01097889e-307],
[8.45596650e-307, 1.24610723e-306]])
np.arange(1,20,5) #1-20的数,间隔5
array([ 1, 6, 11, 16])
np.array([1,2,3,4],float) #创建一维数组,类型为float
array([1., 2., 3., 4.])
np.ones((2,3),dtype='float64') #创建一个二维数组,类型为float64
array([[1., 1., 1.],
[1., 1., 1.]])
data_one = np.array([[1,2,3],[4,5,6]])
data_one.dtype.name
‘int32’
data = np.array([[1,2,3],[4,5,6]])
data.dtype
dtype(‘int32’)
float_data = data.astype(np.float64) #类型转换为float64
float_data.dtype
dtype(‘float64’)
float_data = np.array([1.2,2.3,3.5])
float_data
array([1.2, 2.3, 3.5])
int_data = float_data.astype(np.int64) #数据类型转换为int64
int_data
array([1, 2, 3], dtype=int64)
str_data = np.array(['1','2','3'])
int_data = str_data.astype(np.int64)
int_data
array([1, 2, 3], dtype=int64)
data1 = np.array([[1,2,3],[4,5,6]])
data2 = np.array([[1,2,3],[4,5,6]])
data1 + data2 #数组相加
array([[ 2, 4, 6],
[ 8, 10, 12]])
data1 * data2 #数组相乘
array([[ 1, 4, 9],
[16, 25, 36]])
data1 - data2 #数组相减
array([[0, 0, 0],
[0, 0, 0]])
data1 / data2
array([[1., 1., 1.],
[1., 1., 1.]])
arr1 = np.array([[0],[1],[2],[3]])
arr1.shape
(4, 1)
arr2 = np.array([1,2,3])
arr2.shape
(3,)
arr1 + arr2 #广播操作
array([[1, 2, 3],
[2, 3, 4],
[3, 4, 5],
[4, 5, 6]])
data1 = np.array([[1,2,3],[4,5,6]])
data2 = 10
data1 + data2 #数组想加
array([[11, 12, 13],
[14, 15, 16]])
data1 * data2 #数组相乘
array([[10, 20, 30],
[40, 50, 60]])
data1 - data2 #数组相减
array([[-9, -8, -7],
[-6, -5, -4]])
data1 / data2 #数组相除
array([[0.1, 0.2, 0.3],
[0.4, 0.5, 0.6]])
arr = np.arange(8) #创建一个一维数组
arr
array([0, 1, 2, 3, 4, 5, 6, 7])
arr[5] #获取索引为5的元素
5
arr[3:5] #获取索引为3-5的元素 不包括5
array([3, 4])
arr[1:6:2] #获取索引为1~6的元素,步长为2
array([1, 3, 5])
arr2d = np.array([[1,2,3],[4,5,6],[7,8,9]]) #创建二维数组
arr2d
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
arr2d[1] #获取索引为1的元素
array([4, 5, 6])
arr2d[0,1] #获取第0行第1列的元素
2
arr2d[:2] #获取第0~2行的元素 不包括第2行
array([[1, 2, 3],
[4, 5, 6]])
arr2d[0:2,0:2]
array([[1, 2],
[4, 5]])
arr2d[1,:2]
array([4, 5])
demo_arr = np.empty((4,4)) #创建一个空数组
for i in range(4):
demo_arr[i] = np.arange(i, i + 4) #动态的为数组添加元素
demo_arr
array([[0., 1., 2., 3.],
[1., 2., 3., 4.],
[2., 3., 4., 5.],
[3., 4., 5., 6.]])
demo_arr[[0,2]] #获取索引为[0,2]的元素
array([[0., 1., 2., 3.],
[2., 3., 4., 5.]])
demo_arr[[1,3],[1,2]] #获取索引为(1,1)和(3,2)的元素
array([2., 5.])
#存储学生姓名的数组
student_name = np.array(['Tom','Lily','Jack','Rose'])
student_name
array([‘Tom’, ‘Lily’, ‘Jack’, ‘Rose’], dtype=’ array([[179, 88, 80], array([False, False, True, False]) array([[83]]) array([[ 0, 1, 2, 3], array([[ 0, 4, 8], array([[[ 0, 1, 2, 3], [[ 8, 9, 10, 11], array([[[ 0, 8], [[ 4, 12], array([[[ 0, 1, 2, 3], [[ 8, 9, 10, 11], array([[[ 0, 1, 2, 3], [[ 4, 5, 6, 7], array([2., 3., 4.]) array([ 4, 9, 16]) array([ 16, 81, 256], dtype=int32) array([23, 19, 17, 23]) array([132, 90, 52, 120]) array([12, 10, 13, 15]) array([ True, False, True, True]) array([1, 6, 7]) 45 4.5 0 9 9 0 array([ 0, 1, 3, 6, 10, 15, 21, 28, 36, 45], dtype=int32) [[ 1 2 3 4 5] array([[1, 1, 1, 1], array([[5, 5, 5, 5, 5], array([-1., -2., -1., -2., 0., 1., 1.]) array([ 2., 2., 2., 3., 2., -0., -0., -0.]) [[ 1 0] array([[1, 0], array([[6, 2, 7], array([[2, 6, 7], array([[6, 2, 7], array([[3, 2, 2], array([[ 1, -2, -7], True False array([ 8, 11, 12, 23, 34]) array([ True, True, False, False, True, False, True]) array([[22, 28], array([[0.71541777, 0.82501365, 0.13452841], array([[[0.68720106, 0.85088306, 0.06901039], [[0.62597042, 0.28651044, 0.4481899 ], array([0.64589411, 0.43758721, 0.891773 , 0.96366276, 0.38344152]) array([0.32487821, 0.35618615, 0.71714683, 0.94454022, 0.21145835])#存储学生姓名成绩的数组
student_score = np.array([[179,88,80],[89,90,92],[83,78,85],[78,76,80]])
student_score
[ 89, 90, 92],
[ 83, 78, 85],
[ 78, 76, 80]])#对student_name和字符串'jack'通过运算符产生一个布尔型数组
student_name == 'Jack'
# 将布尔数组作为索引应用于存储成绩的数组student_score,
# 返回的数据是True值对应的行
student_score[student_name=='Jack',:1]
1.6 数组的转置和轴对称
arr = np.arange(12).reshape(3,4)
arr
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])arr.T #使用T属性数组进行转置
[ 1, 5, 9],
[ 2, 6, 10],
[ 3, 7, 11]])arr = np.arange(16).reshape((2,2,4))
arr
[ 4, 5, 6, 7]],
[12, 13, 14, 15]]])arr.transpose(1,2,0) #使用transpose()方法对数组进行转置
[ 1, 9],
[ 2, 10],
[ 3, 11]],
[ 5, 13],
[ 6, 14],
[ 7, 15]]])arr
[ 4, 5, 6, 7]],
[12, 13, 14, 15]]])arr.swapaxes(1,0) #使用swapaxes方法对数组进行转置
[ 8, 9, 10, 11]],
[12, 13, 14, 15]]])1.7 Numpy通用函数
arr = np.array([4,9,16])
np.sqrt(arr) #开方
np.abs(arr) #求绝对值
np.square(arr) #求平方
x = np.array([12,9,13,15])
y = np.array([11,10,4,8])
np.add(x,y) #计算两个数组之和
np.multiply(x, y) #计算两个数组的乘积
np.maximum(x, y) #两个数组元素级最大值的比较
np.greater(x, y) #执行元素级的比较操作
1.8 利用Numpy数组进行数据处理
1.8.1 将条件逻辑转换为数组运算
arr_x = np.array([1,5,7])
arr_y = np.array([2,6,8])
arr_con = np.array([True,False,True])
result = np.where(arr_con,arr_x,arr_y) #满足条件(condition),输出x,不满足输出y
result
1.8.2 数组统计运算
arr = np.arange(10)
arr.sum() #求和
arr.mean() #求平均值
arr.min() #求最小值
arr.max() #求最大值
arr.argmax() #求最大值索引
arr.argmin() #求最小值索引
arr.cumsum() #计算元素的累继和
x = np.arange(1, 16).reshape((3,5))
print(x)
[ 6 7 8 9 10]
[11 12 13 14 15]]np.diff(x,axis = 1) #默认axis=1,后一个值减去前一个
[1, 1, 1, 1],
[1, 1, 1, 1]])np.diff(x,axis = 0)
[5, 5, 5, 5, 5]])np.floor([-0.6,-1.4,-0.1,-1.8,0,1.4,1.7]) #向下取整
np.ceil([1.2,1.5,1.8,2.1,2.0,-0.5,-0.6,-0.3]) #向上取整
x = np.array([[1,0],[2,-2],[-2,1]])
print(x)
np.where(x > 0, x, 0)
[ 2 -2]
[-2 1]]
[2, 0],
[0, 1]])1.8.3 数组排序
arr = np.array([[6,2,7],[3,6,2],[4,3,2]])
arr
[3, 6, 2],
[4, 3, 2]])arr.sort()
arr
[2, 3, 6],
[2, 3, 4]])arr = np.array([[6, 2, 7], [3, 6, 2], [4, 3, 2]])
arr
[3, 6, 2],
[4, 3, 2]])arr.sort(0) # 沿着编号为0的轴对元素排序
arr
[4, 3, 2],
[6, 6, 7]])1.8.4 检索数组元素
arr = np.array([[1,-2,-7],[-3,6,2],[-4,3,2]])
arr
[-3, 6, 2],
[-4, 3, 2]])np.any(arr > 0) #arr中所有元素是否有一个大于0
np.all(arr > 0) #arr的所有元素是否都大于0
1.8.5 唯一化及其他集合逻辑
arr = np.array([12,11,34,23,12,8,11])
np.unique(arr)
np.in1d(arr,[11,12])
1.9 线性代数模块
arr_x = np.array([[1,2,3],[4,5,6]])
arr_y = np.array([[1,2],[3,4],[5,6]])
arr_x.dot(arr_y) #等价于np.dot(arr_x,arr_y)
[49, 64]])1.10 随机数模块
np.random.rand(3,3) #随机生成一个二维数组
[0.22434711, 0.06148614, 0.89242706],
[0.02936374, 0.14336045, 0.88000814]])np.random.rand(2,3,3) #随即生成一个三维数组
[0.94445033, 0.56362904, 0.81075899],
[0.10805486, 0.07066545, 0.71697837]],
[0.61462445, 0.45785905, 0.14678526],
[0.3352477 , 0.99530172, 0.88398376]]])np.random.seed(0) #生成随机数的种子,保证生成的随机数都一样
np.random.rand(5) #随机生成包含5个元素的浮点数组
np.random.seed() #没有设置随机数种子 ,每次随机生成的数据都不一样
np.random.rand(5)
Reference