zoukankan      html  css  js  c++  java
  • 第六节 numpy的常用属性和方法

    import numpy as np
    
    # 二维数组
    t1 = np.array([range(10),range(10,20)])
    print(t1)
    
    # 三维数组
    t2 = np.array([[range(10),range(10,20)],[range(10),range(10,20)]])
    print(t2)
    
    # 查看数组的形状,打印(2, 10),表示2行10列,打印(2, 2, 10),表示两块,每块都是2行10列
    print(t1.shape)
    print(t2.shape)
    
    # reshape改变数组的形状,将二维降为一维,20是数组元素的总个数,flatten只能将二维转换成一维
    print(t1.reshape((20,)))
    print(t1.flatten())
    
    # 数组转置,swapaxes交换轴,原来是0和1
    t1.transpose()
    print(t1.T)
    t1.swapaxes(1, 0)
    
    # 数组的索引和切片
    print(t1[1])  # 取一行
    print(t1[1:3])  # 取连续多行
    print(t1[[1, 3, 4]])  # 取不连续多行
    
    print(t1[:,1])  # 取一列
    print(t1[:,1:3])  # 取连续多列
    print(t1[:,[1,3,5]])  # 取不连续多列
    
    print(t1[1:3,2:4])  # 取交叉区域的数据
    print(t1[[1,2],[3,4]])  # 取不相邻的数据
    
    # 数组中值的修改
    t1[[1,2],[3,4]] = 0
    t1[1:3,2:4] = 1
    t1[t1<5] = 18  # 将t1中小于5的元素都改成18,t1<5返回的是true和false数组
    np.where(t1<10, 0, 10)  # 将t1中小于10的替换成0 ,否则都替换成10
    t1.clip(10, 18)  # 将t1中小于10的替换成10,大于18的替换成18
    
    # 数组的拼接
    np.vstack((t1, t2))  # 竖直拼接,t1在上
    np.hstack(t1, t2)  # 水平拼接,t1左
    
    # 数组的交互
    t1[[1, 2], :] = t1[[2, 1], :]   # 行交换
    t1[:, [1, 2]] = t1[:, [2, 1]]   # 列交换
    
    # 数据的分割,跟拼接刚好相反
    np.vsplit(t1, 2)  # 竖直分割,从第二行开始将t1分为两部分
    np.hsplit(t1, 2)  # 水平分割,从第二列开始将t1分为两部分
    
    # 快速创建全为0或者1的数组
    np.zeros(2, 3)  # 两行三列
    np.ones(3, 4)  # 三行四列
    
    # 创建一个对角线为1的正方形数组
    np.eye(10)  # 10行10列,对角线元素为1,其他全为0
    
    # 获取行列最大值或者最小值的位置
    np.argmin(t1, axis=0)  # 获取每行最小值的位置,返回的是代表位置下标的元组
    np.argmin(t1, axis=1)  # # 获取每列最小值的位置,返回的是代表位置下标的元组
    
    # numpy中的随机数
    np.random.rand(2, 3)  # 随机生成2行3列的均匀分布的数组,浮点数,0-1
    np.random.randn(2, 5) # 随机生成2行3列的标准正态分布的数组,浮点数
    np.random.randint(10, 20, (3, 5))  # 随机生成10-20之间的3行5列的整数数组
    np.random.uniform(10, 20 ,(3, 5)) # 随机生成2行3列的均匀分布的数组,整数数,10-20
    np.random.normal(loc=1, scale=2, size=(3, 5))  # 从指定正态分布中随机抽取样本,loc是分布中心,scale是标准差,3行5列数组
    np.random.seed(5)  # 随机数种子,5是给定的种子值,因为生成的是伪随机数,所以通过设置相同的随机种子,可以每次生成相同的随机数,和其他随机数方法配合使用
    
    # numpy中的copy和view
    a = t1  # a和t1会相互影响
    a = t1[:]  # a和t1会相互影响
    a = t1.copy()  # a和t1互不影响
    
    # numpy中的nan,nan和任何值进行计算返回值都是nan
    print(np.nan == np.nan)  # 返回false,可以利用这个特性来计算数组中的nan有多少个
    np.count_nonzero(t1)  # 计算数组t1中有非0元素的个数
    np.count_nonzero(t1!=t1)  # 返回t1数组中nan的个数
    np.isnan(t1)  # 返回和t1对应的布尔类型的数组,元素是nan,则对应位置为true
    np.count_nonzero(np.isnan(t1))  # 返回t1数组中nan的个数
    
    
    
    # 数组和数字计算,每个元素都进行
    # 数组和形状一样的数字进行计算,也是对应位置一一进行计算
    # 当数组和不同形状的数组进行计算时,某一维度一样且另一维度是0,才能进行计算,否则会报错
    np.sum(t1, axis=0)  # 计算t1中每一列的和,返回包含每一列和的数组,axis没有这个参数则计算整个数组的和
    t1.sum(axis=0)  # 计算t1中每一行的和,返回包含每一行和的数组
    t1.mean(axis=0)  # 均值
    np.median(t1, axis=0)  # 中值,这个方法只能由np调用
    t1.max()
    t1.min()
    np.ptp(t1, axis=0)  # 极值,即最大值和最小值之差,这个方法只能由np调用
    t1.std(axis=1)  # 标准差
    
    
    
    # 读入数据,dtype指定数据类型,skiprows指定跳过多少行,一般跳过表头,usecols指定索引列时第几列,unpack数组转置
    file_path = r'E:anacondatestPythonData高校信息.csv'
    np.loadtxt(file_path, delimiter=",", dtype='', skiprows=1, usecols=1, unpack=False)
  • 相关阅读:
    【MFC初学】
    【递归】【3月周赛1】【Problem B】
    不管ACM是不是屠龙之技
    【贪心+背包】【HDU2546】【饭卡】
    【精度问题】【HDU2899】Strange fuction
    【泛化物品】【HDU1712】【ACboy needs your help】
    【递推】【HDU2585】【hotel】
    【二进制拆分多重背包】【HDU1059】【Dividing】
    【水:最长公共子序列】【HDU1159】【Common Subsequence】
    【递推+矩阵快速幂】【HDU2604】【Queuing】
  • 原文地址:https://www.cnblogs.com/kogmaw/p/12561296.html
Copyright © 2011-2022 走看看