欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

NumPy入门

程序员文章站 2022-06-06 08:05:48
...

本文章为《Python数据科学手册》学习笔记

目录

本文章为《Python数据科学手册》学习笔记

NumPy标准数据类型

创建数组

NumPy数组

1、数组的属性

2、数组索引

3、数组切片

4、 数组的变形

 5、数组拼接和分裂

通用函数

聚合

广播

比较、掩码和布尔逻辑

 花哨的索引

数组的排序

NumPy的结构化数组


NumPy标准数据类型

numpy标准数据类型
数据类型 描述
bool_ 布尔值,用一个字节存储
int_ 默认整型(类似c中的long)
intc

同C中的int相同

intp 用作索引的整型(和C中的ssize_t相同)
int8 字节(byte,范围:-128~127)
int16 整型(-32768~32767)
int32 整型(-2147483648~2147483647)
int64 整型(-9223372036854775808~9223372036854775807)
uint8 无符号整型(0~225)
uint16 无符号整型(0~65535)
uint32 无符号整型(0~4294967295)
unit64 无符号整型(0~18446744073709551615)
float_ float64的简化模式
float16 半精度浮点型:符号比特位,5比特位指数,10比特位尾数
float43 半精度浮点型:符号比特位,8比特位指数,23比特位尾数
float64 半精度浮点型:符号比特位,11比特位指数,52比特位尾数
complex_ complex128的简化形式
complex64 复数,由两个32位浮点数表示
complex128 复数,由两个64位浮点数表示

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

创建数组

创建一个长度为10的数组,数组的值都是0

np.zeros(10,dtype=int)

创建一个3*5的浮点型数组,数组的值都是1

np.ones((3,5),dtype=float)

创建一个3*5的浮点数组,数组的值丢失3.14

np.full((3,5),3.14)

创建一个线性序列数组 ,从0开始,到20结束,步长为2

np.arange(0,20,2)

创建一个5个元素的数组,这5个数均匀地分配到0~1

np.linspace(0,1,5)

创建一个3*3的在0~1均匀分布的随机数组成的数组

np.random.random((3,3))

创建一个3*3,均值为0,标准差为1的正态分布的随机数数组

np.random.normal(0,1,(3,3))

创建一个3*3,[0,10)区间的随机整数数组

np.random.randint(0,10,(3,3))

创建一个3*3的单位矩阵

np.eye(3)

创建一个有3个整数组成的未初始化的数组,数组的值是内存空间中的任意值

np.empty(3)

NumPy数组

1、数组的属性

import numpy as np
np.random.seed(0)  # 设置随机数种子,保证生成同样的数组

x1 = np.random.randint(10, size=6)  # 一维数组
x2 = np.random.randint(10, size=(3, 4))  # 二维数组
x3 = np.random.randint(10, size=(3, 4, 5))  # 三维数组

print(x3.dtype)

//输出

dytype:int64

数组由ndim(维度),shape(形状),size(总大小),dtype(数据类型)三个属性

2、数组索引

通过中括号指定索引获取第i个值

NumPy入门

负值索引可以获取数组的末尾索引

NumPy入门

多维数组可以用逗号分隔的索引元组获取元素

NumPy入门

:1、以上的索引范式,都可以修改元素值  2、NumPy数组是固定类型的,当插入一个整型数组的时候,浮点值会被转化为整型,该过程是不会有提示和警告的!

3、数组切片

x[start:stop:step]

如果三个参数均未指定,默认值为start=0,stop=维度的大小, step=1步长默认为1,取值的范围为[start,stop)

NumPy入门

当步长为负的时候表示start和stop交换,在数组的反应上就是逆序

一个冒号可以表示空切片可以很方便的获取单行和单列,在获取行的时候可以省略空的切片

NumPy入门

 注:数组切片返回的是数组数据的视图,而不是副本,如果修改切片所得的子数组,源数组也会被修改,可以使用copy()方法实现创建副本

NumPy入门

4、 数组的变形

数组变形最灵活的方式就是通过reshape()函数

NumPy入门

 还可以使用newaxis关键字实现将一个一维数组转换为二位的行或列的矩阵

NumPy入门

 5、数组拼接和分裂

np.concatenate

可以将数组元组或数组列作为第一参数,同理两个以上的参数也可以

NumPy入门

 二维数组沿第一轴(从0开始索引,二位数组沿行就是axis=0,列axis=1)的拼接,np.vstack可以达到同样的效果

NumPy入门

NumPy入门

二维数组沿第二轴的拼接,np.hstack可以达到同样的效果 

NumPy入门

 np.dstack沿第三轴拼接

 np.split,np.hsplit,np.vsplit,np.dstack用法与拼接相同

 

通用函数

通用函数 的主要目的是对NumPy数组中的值执行更快的操作,它几乎总比用python循环实现的函数更加有效

1、数组的运算

NumPy入门

2、绝对值

np.absolute(np.abs)

NumPy入门 3、三角函数

NumPy入门

4、指数和对数

NumPy入门

 5、专用的通用函数

在scipy.special中包含一些专用的通用函数

6、高级的通用函数特性

指定输出

NumPy入门

聚和

NumPy入门

外积

NumPy入门

聚合

1、数组值求和

np.sum()

2、最大值和最小值

np.min(),np.max()

数组对象也可以直接调用,但调用的时候要确认执行的是numpy版本,因为python的内置版本运行速度更慢

NumPy入门

 多维数组在使用的时候,默认的情况下是返回整个数组的聚合结果,也可以指定沿哪个轴进行聚合

NumPy入门

 3、其它聚合函数

NumPy入门

广播

将一个值扩展或广播一匹配另外一个数组的现状,或两个数组公共的形状

NumPy入门

 广播的规则

a、如果两个数组的维度不相同,那么小维度数组的现状将会在最左边补1

b、如果两个数组的形状在任何一个维度上都不匹配,那么数组的形状会沿维度为1的维度扩展以匹配另外一个数组的形状

c、如果两个数组的形状在任何一个维度上都不匹配并且没有任何一个维度等于1,那么会引发异常

比较、掩码和布尔逻辑

1、比较操作的使用方法和通用函数类似,当使用比较操作符的时候,numpy内部会使用对应的通用函数

NumPy入门

 2、操作布尔数组

NumPy入门

 注:and和or判断的是整个对象的真假,&和|是指每个对象中的比特位

3、布尔数组可以作为索引,从数组中选取值

NumPy入门

 花哨的索引

传递一组数组索引就可以获得数组中的指定元素

NumPy入门

 利用花哨的索引,结果的形状与传入的索引数组的形状一致

NumPy入门

 对于多维度的数组,花哨的索引同样的适用,花哨的索引的返回值是广播后的索引数组的形状

NumPy入门

 花哨的索引可以和其它索引方案混合适用,且可以使用花哨的索引修改中的值

数组的排序

np.sort 默认情况排序算法是快速排序 ,np.argsort用法一样,但返回的是排好序的索引值

np.sort(a, axis=-1, kind='quicksort', order=None)
a : array_like
    Array to be sorted.
axis : int or None, optional
    Axis along which to sort. If None, the array is flattened before
    sorting. The default is -1, which sorts along the last axis.
kind : {'quicksort', 'mergesort', 'heapsort'}, optional
    Sorting algorithm. Default is 'quicksort'.
order : str or list of str, optional
    When `a` is an array with fields defined, this argument specifies
    which fields to compare first, second, etc.  A single field can
    be specified as a string, and not all fields need be specified,
    but unspecified fields will still be used, in the order in which
    they come up in the dtype, to break ties.

np.partition 返回一个新的数组,最左边的是前K个小的值,往右是任意顺序的的其他值,np.argpartition类似返回的是索引

NumPy的结构化数组

使用np.dtype自定义结构化数组

NumPy入门

 NumPy入门