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

    Numpy学习笔记

    Numpy是Python的一个数值计算库

    image-20200417173629136

    Numpy使用ndarray对象来处理多维数据

    image-20200417173933479

    np.array创建darray

    image-20200417174218829

    Numpy的优势

    image-20200417174258761

    ndarray的元素是连续存储的,因此随机读写性能会好

    image-20200417174411233

    ndarray的属性

    image-20200417174546268

    关键且常用的属性就是shape和dtype

    常见的类型:

    image-20200417174717028

    在创建ndarray时,我们可以指定类型:

    image-20200417174805083

    如果不指定,整数默认是int64,小数默认是float64

    数组修改类型:

    image-20200417180604852

    生成数组的方式

    image-20200417175131625

    linspace第三个参数表示生成的数组中元素的个数

    np.arange的用法和python的range比较像,但是它是可以生成小数,而range只能是整数

    我们可以使用np.round来确定小数的保留位数

    image-20200417222007911

    均匀分布和正态分布

    均匀分布:np.random.uniform(low,high,size)

    low: 采样下界,float类型,默认值为0;
    high: 采样上界,float类型,默认值为1;
    size: 输出样本数目,为int或元组(tuple)类型,例如,size=(m,n,k), 则输出m*n*k个样本,缺省时输出1个值。

    正态分布:np.random.normal(loc,scale,size)

    loc:float

    概率分布的均值,对应着整个分布的中心center

    scale:float

    概率分布的标准差,对应于分布的宽度,scale越大越矮胖,scale越小,越瘦高

    size:int or tuple of ints

    输出的shape,默认为None,只输出一个值

    数组变形

    image-20200417180203636

    数组序列化

    image-20200417180627348

    输出为:

    image-20200417180656776

    数组去重

    image-20200417180721367

    其实python也有一个内置的去重函数叫set(),但是其传入的只能是一维数组,我们也可以将ndarray通过 数组名.flatten()压缩为一维再使用

    逻辑运算

    1. 直接对数组中元素值进行布尔运算,返回布尔数组:

      image-20200417181037358

    2. 对于上面返回的布尔数组,可以再次传入原始数组中从而获取值为True的元素组成的数组

      image-20200417181147218

    3. 还可以对上面的数组直接赋值

      image-20200417181226510

      也就是对满足表达式的元素直接赋值。省去了for循环

    4. image-20200417181355423

    5. image-20200417181457395

      注意上面逻辑与和逻辑或的用法

    统计运算

    image-20200417181847866

    可以选择按行统计还是按列统计

    image-20200417181955566

    image-20200417182105539

    可以用ndarray.方法名,也可以用np.函数名

    argmin返回的是最小值的位置而不是最小值

    数组间运算

    image-20200417182405098

    数组与数的运算实质是数和数组中所有元素的运算

    数组之间也可以运算:

    image-20200417222200507

    可以看到,宽度一致时,是一层一层相减的。但是这样要求t7的长必须为1,t7要是两层的话就不行了。同样地,t7如果是一列也可以算

    矩阵运算

    numpy中数组和矩阵不是一种类型,矩阵的存储使用的是matrix数据类型,当然用ndarray也没什么问题

    使用np.mat来创建matrix

    矩阵乘法:

    对于ndarray类型的话:

    image-20200417215413284

    对于matrix类型,直接使用*即可

    数组的合并与分割

    image-20200417215722359

    hstack是对数组进行水平拼接,而vstack是进行垂直拼接

    image-20200417215817843

    np.concatenate可以进行水平和垂直拼接,但是需要传入参数来确定是怎么拼接

    image-20200417220003922

    np.split可以传入要分割的个数(此时默认每个里的元素数量是相同的),也可以按下标分割,例如上图中第二个例子将前3个、4-5个等等分成不同组

    文件的读取和数据处理

    image-20200417220215329

    读取csv

    但是这样的读取是存在问题的:

    原csv是这样:

    image-20200417220343691

    读出来是这样:

    image-20200417220323716

    (nan:not a number)

    对于字符串会自动读成nan,因为ndarray中元素的类型需要是一样的,所以不能第一行是字符串而剩下的是数。这个nan的类型和其他元素的类型保持一致

    我们可以看到原本的数据中其实就是有两个缺失值的,这个一般怎么处理呢?一种方法是,如果我们的数据够多,就可以直接删除这个缺失值所在的样本;另外一个思路是求缺失值所在的那一列的平均值填入,具体函数如下:

    image-20200417221006313

    所以我们一般不用numpy来读文件,而只用它来处理文件

    而对于数据处理,pandas更为方便

  • 相关阅读:
    Java接口(interface),扫盲贴
    Java抽象类,扫盲贴
    Java类的继承、super关键字、复写
    Java内部类,扫盲贴
    数据结构学习笔记1--简单排序
    7.1 通用的职责分配软件原则 GRASP原则一: 创建者 Creator
    6.6 面向对象设计
    6.5 开始进入设计 … Transition to Design
    6.4 操作契约 Operation Contracts
    6.3 契约式设计
  • 原文地址:https://www.cnblogs.com/jiading/p/12801132.html
Copyright © 2011-2022 走看看