numpy模块: --对numpy数值---矩阵进行科学运算 --数据分析 --tensorflow/pytorch ---张量进行科学运算 kaggle / 天池 /acm import numpy as np gpu -->图形显卡0---图形存储 --->numpy数组--可变 #---一维 arrl = np.array([1,2,4,6]) #[可迭代] #二维 arr = np.array([[1,2,4],[7,8,9]]) #三维 ---》tensorflow #属性: T 行位互换 dtype #数组元素的数据类型,numpy数组属于python ndim 维数 shape 维度大小(元组) astype 类型转换 切割数组: print(arr[:,:]) #行,列--从零开始,不要最后的 --》有步长 赋值: print(arr[:,:] = 0) --》逻辑取值 --数组合并: np.hstack((arr1,arr2)) 水平 np.vstack((arr1,arr2)) 垂 np.concatenate(((arr1,arr2),axis=0/1))
numpy模块:python
--是python中一种开源的数值计算扩展库。能够用来存储和处理大型numpy数组。数组
用途:
1.区别于list1列表。提供了数组操做,数组运算,及统计分布和简单的数学模型app
2.计算速度快,甚至要优于python内置的简单运算, 使得其成为pandas、sklearn等模块的依赖包。 高级的框架如TensorFlow、PyTorch等,其数组操做也和numpy很是类似。框架
为何用numpy?dom
list1 =[1,2,3] list2 = [4,5,6] --list1 * list2 lis_res = [] for i in range(len(list1)): lis_res.append(list1[i]*list2[i]) ---时间复杂度: for 循环--》o(n)
建立numpy数组:
---numpy数组即numpy的ndaray对象,建立numpy数组就是把一个列表传入np.array()方法函数
import numpy as np #建立一维数组: arr = np.array([1,2,3])# []为可变数据类型 print(arr,type(arr)) #建立二维数组 arr1 = np.array([[1,2,3],[4,5,6]]) #建立三维数组 arr2 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
numpy数组的经常使用属性:spa
T 数组的转置(行位互换)--》高维 dtype 数组元素的数据类型 size 数组元素的个数 ndim 数组的维数 shape 数组的维度大小(以元组形式) astype 类型转换 dtype 种类: bool_,int(8,16,32,64), float(16,32,64)
arr = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.float32) print(arr) [[1. 2. 3.] [4. 5. 6.]] print(arr.T) [[1. 4.] [2. 5.] [3. 6.]] print(arr.shape) (2, 3) #二行,三列
numpy数组的行列数:code
print(arr.shape[0]) -->行 print(arr.shape[1]) -->列
切割数组:orm
--numpy数组的切割涉及到行和列的切割,可是二者切割的方式都是从索引0开始,而且取头不取尾。对象
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]) #取全部元素 print(arr[:,:]) #取第一行全部元素 print(arr[:1,:]) print(arr[0, [0, 1, 2, 3]]) #取第一列全部元素 print(arr[:,:1]) #---逻辑取值,返回一个数组, print(arr[arr>5]) --[ 6 7 8 9 10 11 12] numpy数组按运算符取元素的原理,即经过arr > 5生成一个布尔numpy数组 print(arr > 5)
numpy数组元素替换:
--numpy数组也是一个可变类型的数据,即若是对numpy数组进行替换操做,会修改原numpy数组的元素
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]) print(arr) arr1 = arr.copy() arr1[:1,:] = 0 print(arrl) [[ 0 0 0 0] [ 5 6 7 8] [ 9 10 11 12]] arr2 = arr.copy() arr[arr>5] = 0 print(arr2) arr3[:,:] = 0
numpy数组的合并:
arr1 = np.array([[1, 2], [3, 4], [5, 6]]) arr2 = np.array([[7, 8], [9, 10], [11, 12]]) # 合并两个numpy数组的行,注意使用hstack()方法合并numpy数组,numpy数组应该有相同的行,其中hstack的h表示horizontal水平的 print(np.hstack(arr1,arr2)) [[ 1 2 7 8] [ 3 4 9 10] [ 5 6 11 12]] # 合并两个numpy数组,其中axis=1表示合并两个numpy数组的行 print(np.concatenate((arr1, arr2), axis=1)) # 合并两个numpy数组的列,注意使用vstack()方法合并numpy数组,numpy数组应该有相同的列,其中vstack的v表示vertical垂直的 print(np.vstack((arr1, arr2))) [[ 1 2] [ 3 4] [ 5 6] [ 7 8] [ 9 10] [11 12]] # 合并两个numpy数组,其中axis=0表示合并两个numpy数组的列 print(np.concatenate((arr1, arr2), axis=0))
经过函数建立numpy数组:
array() 将列表转化为数组,可选择显示指定dtype areange() range的numpy版,支持浮点数 linspace() 相似arange(),第三参数为数组长度 zero()/ones() 根据指定形状和dtype建立全0 / 1数组 eye() 建立单位矩阵 empty() 建立一个元素全随机数 reshape() 重塑形状
arr = np.array([1,2,3]) print(arr) print(np.arange(10)) -[0 1 2 3 4 5 6 7 8 9] print(np.arange(1,10,2)) --linspace / logspace #构造一个等差数列, print(np.linspace(0,20,5)) --[ 0. 5. 10. 15. 20.] # 构造一个等比数列,从10**0取到10**20,取5个数 print(np.logspace(0,20,5)) --[1.e+00 1.e+05 1.e+10 1.e+15 1.e+20] zeros / ones / eye / empty print(n.zero(3,4)) [[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]] print(np,eye(3)) [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]] 构造一个4*4的随机numpy数组,里面的元素是随机生成的 print(np.empty((4, 4))) [[ 2.31584178e+077 -1.49457545e-154 3.95252517e-323 0.00000000e+000] [ 0.00000000e+000 0.00000000e+000 0.00000000e+000 0.00000000e+000] [ 0.00000000e+000 0.00000000e+000 0.00000000e+000 0.00000000e+000] [ 0.00000000e+000 0.00000000e+000 1.29074055e-231 1.11687366e-308]] #reshape--重塑形状 arr = np.ones([2,2],dtype=int) print(arr.reshape(4,1)) [[1] [1] [1] [1]]
numpy数组运算:
+ 两个numpy数组对应元素相加 - 两个numpy数组对应元素相减 * 两个numpy数组对应元素相乘 / 两个numpy数组对应元素相除,若是都是整数则取商 % 两个numpy数组对应元素相除后取余数 **n 单个numpy数组每一个元素都取n次方,如**2:每一个元素都取平方
arr1 = np.array([[1, 2], [3, 4], [5, 6]]) arr2 = np.array([[7, 8], [9, 10], [11, 12]]) print(ar11+arr2) print(arr1**2) [[ 8 10] [12 14] [16 18]]
numpy数组的转置
---numpy数组的行和列互换
arr = np.array([[1, 2, 3], [4, 5, 6]]) print(arr.transpose) /print(arr.T) [1 4] [2 5] [3 6]]
numpy数组的逆:
--numpy数组行和列相同时,numpy数组才可逆
arr = np.array([[1, 2, 3], [4, 5, 6], [9, 8, 9]]) print(np.linalg.inv(arr))
Numpy数组科学和统计方法:
sum 求和 cumsum 累加求和 mean 求平均数 std 求标准差 var 求方差 min 求最小值 max 求最大值 argmin 求最小值索引 argmax 求最大值索引 sort 排序
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) print(arr.max()) # 获取举着每一行的最大值 print(arr.max(axis=0)) # 获取numpy数组最大元素的索引位置 print(arr.argmax(axis=1)) # 获取numpy数组每一列的平均值 print(arr.mean(axis=0)) # 获取numpy数组每一列的元素的方差 print(arr.var(axis=0)) # 对numpy数组的每一列求和 print(arr.sum(axis=0)) # 第n个元素为前n-1个元素累加和 print(arr.cumsum())
numpy.random生成随机数:
rand(d0,d1,⋯,dn) 产生均匀分布的随机数 dn为第n维数据的维度 randn(d0,d1,⋯,dn) 产生标准正态分布随机数 dn为第n维数据的维度 randint(low[, high, size, dtype]) 产生随机整数 low:最小值;high:最大值;size:数据个数 random_sample([size]) 在[0,1)内产生随机数 size为随机数的shape,能够为元祖或者列表 choice(a[, size]) 从arr中随机选择指定数据 arr为1维数组;size为数组形状 uniform(low,high [,size]) 给定形状产生随机数组 low为最小值;high为最大值,size为数组形状 shuffle(a) 与random.shuffle相同 a为指定数组