zoukankan      html  css  js  c++  java
  • numpy 学习笔记

    numpy

    1 什么是numpy

    ​ 一个在Python中做科学计算的基础库,重在数值计算,也是大部分Python科学计算库的基础库,多哦用于在大型、多维数组上执行数值运算。

    2 numpy基础

    创建数组: np.arange的用法arange([start,stop,step], dtype=None)(不包括stop)

    import numpy as np
    a = np.array([1,2,3,4,5])
    b = np.array(range(1,6))
    c = np.arange(1,6) 
    #	上面a,b,c内容相同,注意arange和range的区别
    

    数组的类名

    a = np.array([1,2,3,4,5])
    type(a)
    

    数组的类型

    a.dtype

    import numpy as np
    import random
    
    # numpy中的数据类型
    t1 = np.arange(4,10,2)
    print(type(t1))#输出int64
    t2 = np.array(range(1,4),dtype=float)
    print(type(t2))#输出float64
    t3 = np.array(range(1,4),dtype=float32)
    print(type(t3))#输出float32
    t4 = np.array(range(1,4),dtype="i1")
    print(t4.dtype)  # 输出:int8
    
    # numpy中的bool类型
    t5 = np.array([1,1,0,1,0,0],dtype=bool)
    print(t5)  #输出:[ True  True False  True False False]
    print(t5.dtype)  # 输出:bool
    
    # 调整数据类型
    t6 = t5.astype("int8")
    print(t4.dtype)  # 输出:int8
    
    # numpy中的小数
    t7 = np.array([random.random() for i in range(10)])
    print(t7.dtype) #输出:float64
    
    # t7中的小数都保留两位
    t8 = np.round(t7,2)
    

    numpy 中常见的更多数据类型

    数据类型的操作

    指定创建的数组的数据类型:
    t5 = np.array([1,1,0,1,0,0],dtype=bool)

    修改数组的数据类型:
    t6 = t5.astype("int8")

    修改浮点型的小数位数:
    np.round(t7,2) # 数组名,小数位数

    数组的形状

    查看数组的形状:a.shape a 是数组名

    修改数组的形状:a.reshape()

    数组和数的计算

    数会对数组中的每个值进行计算

    import numpy as np
    a = np.array([[3,4,5,6,7,8],[4,5,6,7,8,9]])
    print(a+1)
    print(a*3)
    

    数组和数组的计算

    import numpy as np
    a = np.array([[3,4,5,6,7,8],[4,5,6,7,8,9]])
    b = np.array([[21,22,23,24,25,26],[27,28,29,30,31,32]])
    print(a+b)
    print(a*b)
    

    当进行运算的两个数组形状一样时,值按对应位置进行计算。

    维度不同的数组进行运算时:

    广播原则

    如果两个数组的后缘维度(即从末尾开始算起的维度)的轴长度相符或其中一方的长度为1,则认为它们是广播兼容的,广播会在缺失和(或)长度为1 的维度上进行。

    轴:

    在numpy中可以理解为方向,使用0,1,2...数字表示,对于一个一维数组,只有一个0轴,对于2维数组(shape(2,2)),有0轴和1轴,对于三维数组(shape(2,2)),有0,1,2轴

    numpy读取数据

    CSV:Comma-Separated Value,逗号分隔值文件

    显示:表格状态

    源文件:换行和逗号分隔行列的格式化文本,每行数据表示一条记录

    np.loadtxt(frame,dtype=np.float,delimiter=None,skiprows=0,unpack=False)

    • frame:文件、字符串或产生器,可以是.g或bz2压缩文件
    • dtype:数据类型,可选,CSV的字符串以什么数据类型读入数组中,默认np.float
    • delimiter:分隔字符串,默认是任何空格,读CSV时改完逗号 delimiter=","
    • skiprows:跳过前X行,一般跳过第一行表头
    • usecols:读取指定的列,索引,元组类型
    • unpack:如果为True,读入属性将分别写入不同数组变量,一列数据会组成一行,相当于转置的效果,False读入数据只写入一个数组变量,有多少条数据就有多少行,默认False

    numpy中的转置

    三种方法:

    • t.transpose() #t是数组名

    • t.T

    • t.swapaxes(1,0) #将0轴和1轴交换

    numpy索引和切片

    #取行
    print(t[2]) # 取第3行
    print(t[2,:]) # 取第3行
    
    #取连续多行
    print(t[2:]) # 第三行开始的取
    print(t[2:,]) # 第三行开始的取
    
    #取不连续多行
    print(t[[2,4,6]]) # 取2,5,7行
    print(t[[2,4,6],:]) # 取2,5,7行
    
    #取列
    print(t[:,0]) # 取第一列
    print(t[1,0]) # 取第2行第1列
    
    

    numpy中数值的修改

    t[:,2:3] = 0 修改制定位置的值

    t[t<10] = 3 修改符合条件值 numpy中布尔索引

    numpy中三元运算符

    np.where(t<10,0,10) #将t中小于10的替换为0,否则替换为10。

    numpy中的clip(裁剪)

    t.clip(10,18) # 小于10的替换为10,大于18的替换为18,但nan不会被替换

    数组的拼接

    np.vstack(t1,t2) #竖直拼接t1和t2

    np.hstack(t1,t2) # 水平拼接

    数组的行列交换

    t[[1,2],:] = t[[2,1],:] #行交换 第2行和第3行交换

    t[:,[0,2]] = t[:,[2,0]] #列交换 第1列和第3列交换

    numpy 更多好用的方法

    1. 获取最大值最小值的位置

      np.argmax(t,axis=0) #获取x轴上的最大值

      np.argmin(t,axis=1) #获取x轴上的最小值

    2. 创建一个全0的数组 np.zeros((3,4))

    3. 创建一个全1的数组 np.ones((3,4))

    4. 创建一个对角线为1的正方形数组(方阵):np.eye(3) (边长)

    numpy生成随机数

    • .rand(d0,d1,...dn) 创建d0-dn维度的均匀分布的随机数组,浮点数,范围从0~1
    • .randn(d0,d1,...dn) 创建d0-dn维度的标准正态分布随机数,浮点数0,标准差1
    • .randint(low,high,(shape)) 从给定上下限范围选取随机数整数,范围是low,high,形状是shape
    • .uniform(low,high,(size)) 产生具有均匀分布的数组,low起始值,high结束值,size形状
    • .normal(loc,scale,(size)) 从指定正态分布中随机抽取样本,分布中心是loc(概率分布的均值),标准差是scale,形状是size
    • .seed(s) 随机数种子,s是给定的种子值。因为计算机生成的是伪随机数,所以通过设定相同的随机数种子,可以每次生成相同的随机数

    numpy的注意点copy和view

    1. a=b 把b赋给a,a和b会相互影响
    2. a=b[:],视图操作,一种切片,会创建新的对象a,但是a的数据完全由b保管,他们两个的数据变化是一致的
    3. a = b.copy(),复制,a和b互不影响

    numpy 中的nan和inf

    nan(NAN,Nan):not a number表示不是一个数字

    什么时候numpy会出现nan:

    • 当我们读取本地的文件为float的时候,如果有缺失,就会出现nan
    • 当做了一个不合适的计算的时候(比如无穷大减无穷大)

    numpy中nan的注意点:

    1. 两个nan是不相等的,np.nan != nan
    2. 判断数组中nan的个数:np.count_nonzero(t != t)
    3. nan和任何值计算都为nan

    inf(-inf,inf):infinity,inf 表示正无穷,-inf表示负无穷

    什么时候出现inf(正、负)

    • 一个数除以0

    numpy中常用统计函数

    • 求和:t.sum(axis=None)
    • 均值:t.mean(axis=None) 受群点的影响比较大
    • 中值:np.median(t,axis=None)
    • 最大值:t.max(axis=None)
    • 最小值:t.min(axis=None)
    • 极值:np.ptp(t,axis=None) 即最大值和最小值之差
    • 标准差:t.std(axis=None)

    默认返回多维数组的全部的统计结果,如果知道axis则返回一个当前轴上的结果

  • 相关阅读:
    为App签名(为apk签名)
    Android如何获取网络连接状态(3G/Wifi)及怎样调用网络配置界面
    android textview改变部分文字的颜色和string.xml中文字的替换及部分内容设置颜色、字体、超链接、图片
    Toast和Looper。Handler消息循环机制
    android 创建DateTime类型的数据库
    Android中dp和px之间进行转换
    Java的ThreadPoolExecutor使用几点建议
    ListView中设置item点击状态的背景色
    android 让一个控件按钮居于底部的几种方法
    sqlite3数据类型和函数
  • 原文地址:https://www.cnblogs.com/l999q/p/12333884.html
Copyright © 2011-2022 走看看