1.numpy的导入以及查看版本 >>> import numpy as np >>> print(np.__version__) 1.15.4 2.创建一维(或多维)数组 # 通过list初始化来创建 >>> np.array([1,2,3,4,5]) array([1, 2, 3, 4, 5]) # 通过arange方法生成 >>> np.arange(10) array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) # 指定创建范围和步长 >>> np.arange(3,10,2) array([3, 5, 7, 9]) # 二维(3,3) >>> np.array([[1,2,3],[4,5,6],[7,8,9]]) array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 三维(2,2,2) >>> np.array([[[1,3],[2,4]],[[3,6],[4,8]]]) array([[[1, 3], [2, 4]], [[3, 6], [4, 8]]]) 3.创建布尔数组 # 一维 >>> np.full(3, True, dtype=bool) array([ True, True, True]) # 二维 >>> np.full((3, 3), True, dtype=bool) array([[ True, True, True], [ True, True, True], [ True, True, True]]) 4.从数组中提取(或替换)满足指定条件的元素 # 提取数组中的所有奇数 >>> arr = np.arange(10) >>> arr[arr % 2 == 1] array([1, 3, 5, 7, 9]) # 提取大于4的数 >>> arr[arr > 4] array([5, 6, 7, 8, 9]) # 替换所有奇数为-1 >>> arr[arr % 2 == 1] = -1 >>> arr array([ 0, -1, 2, -1, 4, -1, 6, -1, 8, -1]) 5.改变数组的形状 >>> arr = np.arange(12) >>> arr.reshape(2,6) array([[ 0, 1, 2, 3, 4, 5], [ 6, 7, 8, 9, 10, 11]]) # 设为-1维数会自动匹配 >>> arr.reshape(3,-1) array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]]) >>> arr.reshape(2,2,3) array([[[ 0, 1, 2], [ 3, 4, 5]], [[ 6, 7, 8], [ 9, 10, 11]]]) 6.类型转换 >>> a = np.arange(10) >>> a.dtype dtype('int32') # 转换为 str 类型 >>> a.astype(str) array(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'], dtype=' # 转换为 float 类型 >>> a.astype(float) array([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.]) 7.垂直合并数组 >>> a = np.arange(8).reshape(2,4) >>> b = np.arange(8,12) # 方法1 >>> np.vstack((a, b)) array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]]) # 方法2 >>> np.row_stack((a,b)) array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]]) # 方法3,注意 concatenate 垂直合并的两个数组维数要一致 >>> np.concatenate([a, b], axis=0) Traceback (most recent call last): File "", line 1, in np.concatenate([a, b], axis=0) ValueError: all the input arrays must have same number of dimensions >>> np.concatenate([a, [b,b]], axis=0) array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11], [ 8, 9, 10, 11]]) # 方法4,合并的两个数组维数要一致 >>> np.r_[a,[b,b]] array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11], [ 8, 9, 10, 11]]) 8.水平合并数组 >>> a = np.arange(8).reshape(2,4) >>> b = np.arange(8,12).reshape(2,2) # 方法1 >>> np.hstack((a,b)) array([[ 0, 1, 2, 3, 8, 9], [ 4, 5, 6, 7, 10, 11]]) # 方法2 >>> np.column_stack((a,b)) array([[ 0, 1, 2, 3, 8, 9], [ 4, 5, 6, 7, 10, 11]]) # 方法3 >>> np.concatenate([a, b], axis=1) array([[ 0, 1, 2, 3, 8, 9], [ 4, 5, 6, 7, 10, 11]]) # 方法4 >>> np.c_[a,b] array([[ 0, 1, 2, 3, 8, 9], [ 4, 5, 6, 7, 10, 11]]) 9.保存和读取txt(或csv) >>> filename = 'data.txt' # or filename = 'data.csv' >>> a = np.arange(12).reshape(3,4) # 保存:fmt 指定保存的数据类型,delimiter 指定分隔符 >>> np.savetxt(filename, a, fmt='%d', delimiter=',') # 读取:dtype 指定读取后的类型,delimiter 指定分隔符 >>> np.loadtxt(filename, dtype=float, delimiter=',') array([[ 0., 1., 2., 3.], [ 4., 5., 6., 7.], [ 8., 9., 10., 11.]]) 10.数组的特殊运算 >>> a = np.arange(10) >>> a.sum() # 求和 45 >>> a.max() # 求最大值 9 >>> a.min() # 求最小值 0 >>> a.mean() # 求平均值 4.5 >>> a.ptp() # 求数组中元素最大值与最小值的差 9 >>> np.median(a) # 求数组的中位数 4.5 >>> np.std(a) # 求数组的标准差 2.8722813232690143 >>> np.var(a) # 求数组的方差 8.25 >>> a ** 2 # a中每个数平方 array([ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81], dtype=int32) >>> a.dot(a) # 点积运算,对应元素相乘后求和,返回一个标量 285 >>> a.dot(a.T) # a.T是a的转置,也可以用 a.transpose() 285 11.创建零矩阵、1矩阵、单位阵 >>> np.zeros((2, 3)) # 零矩阵 array([[0., 0., 0.], [0., 0., 0.]]) >>> np.ones((4, 3)) # 1矩阵 array([[1., 1., 1.], [1., 1., 1.], [1., 1., 1.], [1., 1., 1.]]) >>> np.identity(3) # 单位阵,也可以用 np.eye(3) array([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]]) 12.矩阵的特殊运算 (1)array内积运算np.dot() # 一维内积,对应元素相乘后求和 >>> A=np.array([1, 2, 3]) >>> B=np.array([4, 5, 6]) >>> A.dot(B) # or A.dot(B.T) 32 无锡×××医院 https://yyk.familydoctor.com.cn/20612/ # 二维内积,矩阵A[m,n]的列数等于矩阵B[n,p]的行数,与线性代数的矩阵乘法相同(C[i,j] = sum(A[i,k] * B[k,i]),
k in [i,n]) # 假设C=A·B,则C[1,1] = A[1,1]*B[1,1] + A[1,2]*B[2,1] + A[1,3]*B[3,1] = 1*2 +
2*2 + 3*2 = 12 >>> A=np.array([[1, 2, 3], [4, 5, 6]]) # (2, 3) >>> B=np.array([[2, 3], [2, 3], [2, 3]]) # (3, 2) >>> A.dot(B) # or np.dot(A, B) array([[12, 18], [30, 45]]) (2)array元素乘法运算np.multiply() # 元素的乘法运算是矩阵指对应元素相乘,可以用np.multiply(),也可以直接写" * "运算符 # 元素的乘法运算要求两个矩阵的维数必须要一致 # 一维数组 >>> A=np.array([1, 2, 3]) >>> B=np.array([4, 5, 6]) >>> A * B array([ 4, 10, 18]) >>> np.multiply(A, B) array([ 4, 10, 18]) # 二维数组 >>> A = np.arange(8) >>> A = A.reshape(2,4) >>> A array([[0, 1, 2, 3], [4, 5, 6, 7]]) >>> A * A array([[ 0, 1, 4, 9], [16, 25, 36, 49]]) >>> np.multiply(A, A) array([[ 0, 1, 4, 9], [16, 25, 36, 49]]) (3)matrix乘法运算 # matrix乘法运算可使用np.matmul(),也可使用" * "运算符 # matrix乘法运算与array的二维内积相同,所以也可以用np.dot() >>> MA = np.matrix([[1, 2, 3], [4, 5, 6]]) >>> MB = np.matrix([[2, 3], [2, 3], [2, 3]]) >>> MA matrix([[1, 2, 3], [4, 5, 6]]) >>> MB matrix([[2, 3], [2, 3], [2, 3]]) >>> MA * MB matrix([[12, 18], [30, 45]]) >>> np.matmul(MA, MB) # or np.dot(MA, MB), MA.dot(MB) matrix([[12, 18], [30, 45]]) (4)笛卡尔积运算 # 笛卡尔积也称为直积,其实就是集合的映射关系,可以用itertools.product()来实现 # 比如A={a, b},B={1,2,3},则A和B的笛卡尔积为{(a,1), (a,2), (a,3), (b,1), (b,2),
(b,3)} >>> import itertools >>> A = np.array(['a', 'b']) >>> B = np.array([1, 2, 3]) >>> D = itertools.product(A, B) >>> list(D) # 直接转list,list中每个元素为tuple类型 [('a', 1), ('a', 2), ('a', 3), ('b', 1), ('b', 2), ('b', 3)] # 也可以通过循环来遍历D >>> for d in D: print(d) ('a', 1) ('a', 2) ('a', 3) ('b', 1) ('b', 2) ('b', 3) 待更新: python数据分析系列(二)——Matplotlib的使用 python数据分析系列(三)——Scipy的使用
|