一、操作方式: import numpy as np # 1.生成数组 list1 = [1, 2, 3, 4] arr1 = np.array(list1) # 把列表变成一维数组,元组类似 arr2 = np.arange(1, 20, 2) # 创建[1,20)顺序1d数组,现在指定是2(start,end,step),默认step=1,star=0 arr3 = np.zeros(4) # 创建全为0的1d数组,默认是浮点型f arr4 = np.ones(4) # 创建全为1的1d数组,默认是浮点型f arr5 = np.eye(3) # 创建全为1的2d对角矩阵,默认是浮点型f arr6 = np.random.rand(5) # 创建[0,1)的随机1d数组,参数是元素个数 arr7 = np.random.randint(1, 5, (2, 3)) # 创建([stat,end),(shape))的随机整数数组 arr8 = np.random.uniform(1, 3, (2, 2)) # 创建([stat,end),(shape))的随机浮点型数组 arr9 = np.linspace(-1, 1, 20) # 创建([stat,end],个数)均匀分布数组 arr10 = np.arange(20) # 创建[0,19]step为1的1d数组 # 2.改变数组的形状 np.random.shuffle(arr10) # 随机打乱数组 arr11 = arr10.reshape(4, 5) # 重新生成改变形状的数组,原数组不变,形状(矩阵个数,行,列) print(arr10.ndim, arr11.ndim, arr11) print(arr11.transpose()) # 矩阵转置相当于数组名.T,带括号的是函数不会改变原值,返回一个新值 print(arr11.flatten()) # 将数组变成1d print(arr11.ravel()) # 将数组变成1d print(arr11.reshape(20)) # 将数组变成1d print(arr11) arr12 = np.random.randint(0, 2, (4, 2)) print(np.hstack((arr11, arr12))) # 必须是同维数组,且拼接2对象作为一个参数输入,横拼行数相同 arr13 = np.random.randint(0, 2, (1, 5)) print(np.vstack([arr11, arr13])) # 必须同列,元组和列表组合成为一个参数 print(np.hsplit(arr11, 5)) # 横切,5列必须是均等分,只能切5份相当于np.split(arr11, 5, axis=1) print(np.vsplit(arr11, 2)) # 竖切,4行,2份是均等份,相当于np.split(arr11, 2, axis=0) print(np.array_split(arr11, 3, axis=1)) # 1为竖轴,0为横轴 print(np.array_split(arr11, 3, axis=0)) # 3.切片与索引 # 一维数组的直接索引和列表一样,bool索引把满足条件元素变成True,不满足变成False print(arr1[(arr1 > 2) & (arr1 < 5)]) # 把arr1中(2,5)之间的数据提取出来,and用&,or用|,相等一样 # 二维数组的索引 arr14 = np.random.uniform(1, 5, (3, 3)) print(arr14, arr14[0, 0], arr14[-1, -1], arr14[1:, 1:]) arr14[arr14 < 2] = 0 # bool选择元素然后改变其值 # 4.数组的增删改 # 数组的增加等于拼接,删除等于切片提取,改等于根据索引赋值 arr14[:2, :2] = [[0, 0], [1, 1]] # 将数组中的(2,2)部分修改,shape必须一样 print(arr14, arr14[:3, :2]) # 先确定所有行,再提取0-2列,是行就直接提取 print(np.delete(arr14, 1, axis=1)) # (数组,索引(int或者bool),轴向)删除第2列 print(np.delete(arr14, 6)) # 删除n/列整行余列元素,此处n为6,即(2,0)3行1列元素,返回的是一个一维数组 二、常用函数: # 1.统计函数 arr1 = np.random.randint(0, 120, (20, 6)) print(arr1) print(np.sum(arr1, axis=1)) # 按照行求和返回一个一维数组 print(np.sum(arr1, axis=0)) # 按照列求和返回一个一维数组 print(np.sum(arr1[1])) # 指定2行求和 print(np.sum(arr1[:, 2])) # 指定3列求和 print(np.mean(arr1[:, 2])) # 指定3列求平均 print(np.var(arr1[:, 2])) # 指定3列求方差,标准差为std,最大max,最小min print(np.argmax(arr1[:, 2])) # 返回指定列最大值的索引,最小为argmin print(np.cumsum(arr1)) # 数组所有元素累加,返回一维数组 print(np.cumprod(arr1[1])) # 数组指定行所有元素累乘,返回一维数组 # 2.字符串函数,一般用不到,numpy主要用来科学计算 # 3.算术函数,作用于每一个元素 arr1 = np.random.uniform(0, 12, (3, 4)) print(np.ceil(arr1)) # 向上取整 print(np.floor(arr1)) # 向下取整 print(np.rint(arr1)) # 四舍五入取整 print(np.isnan(arr1)) # 判断是否不是数字,绝对值abs() print(arr1, np.divide(2, arr1)) # 2除以数组中每一个元素 print(arr1, np.multiply(1/3, arr1)) # 数组中每一个元素除以3 print(arr1, np.where(arr1 > 1, 2, arr1)) # 三目运算符,数组中每一个元素满足条件执行变成2,不满足执行本身 三、数组的运算及nan和inf: # 广播机制的核心就是需要有一个维度是兼容的,运算兼容矩阵运算 import numpy as np arr1 = np.random.randint(0, 12, (3, 4)) arr2 = arr1 + 4 # 每个数组都加上4 arr3 = np.random.randint(0, 12, (3, 4)) arr4 = arr2 + arr3 # 相同shape对应元素相加 arr5 = np.arange(4) arr6 = arr2 + arr5 # 1d数组默认被每行相加,列数要一致,列可通过转置实现 arr7 = arr2[0] + arr5 # 指定行和1d数组相加,返回1d数组 arr8 = np.arange(3) arr9 = arr2[:, 0] + arr8 # 指定列和1d数组相加,返回1d数组, # nan[0/0,nan参与计算,读取数据缺失],inf正无穷,任意非0数据/0 # 任意两个nan默认不相等(利用数组本身相等判断就可以获取nan),一般删除,或者用0和平均值填充 arr1[0] = 0 arr10 = arr1/0 # 构造一个第一行为nan的数据 print(arr10, np.where(arr10 != arr10, 2, arr10)) # 把nan替换成2,inf是可以相等的
笔记:numpy的基本操作及常用函数
猜你喜欢
转载自blog.csdn.net/lizhyangmm/article/details/127133034
今日推荐
周排行