NumPy入门
本文章为《Python数据科学手册》学习笔记
目录
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个值
负值索引可以获取数组的末尾索引
多维数组可以用逗号分隔的索引元组获取元素
注:1、以上的索引范式,都可以修改元素值 2、NumPy数组是固定类型的,当插入一个整型数组的时候,浮点值会被转化为整型,该过程是不会有提示和警告的!
3、数组切片
x[start:stop:step]
如果三个参数均未指定,默认值为start=0,stop=维度的大小, step=1步长默认为1,取值的范围为[start,stop)
当步长为负的时候表示start和stop交换,在数组的反应上就是逆序
一个冒号可以表示空切片可以很方便的获取单行和单列,在获取行的时候可以省略空的切片
注:数组切片返回的是数组数据的视图,而不是副本,如果修改切片所得的子数组,源数组也会被修改,可以使用copy()方法实现创建副本
4、 数组的变形
数组变形最灵活的方式就是通过reshape()函数
还可以使用newaxis关键字实现将一个一维数组转换为二位的行或列的矩阵
5、数组拼接和分裂
np.concatenate
可以将数组元组或数组列作为第一参数,同理两个以上的参数也可以
二维数组沿第一轴(从0开始索引,二位数组沿行就是axis=0,列axis=1)的拼接,np.vstack可以达到同样的效果
二维数组沿第二轴的拼接,np.hstack可以达到同样的效果
np.dstack沿第三轴拼接
np.split,np.hsplit,np.vsplit,np.dstack用法与拼接相同
通用函数
通用函数 的主要目的是对NumPy数组中的值执行更快的操作,它几乎总比用python循环实现的函数更加有效
1、数组的运算
2、绝对值
np.absolute(np.abs)
3、三角函数
4、指数和对数
5、专用的通用函数
在scipy.special中包含一些专用的通用函数
6、高级的通用函数特性
指定输出
聚和
外积
聚合
1、数组值求和
np.sum()
2、最大值和最小值
np.min(),np.max()
数组对象也可以直接调用,但调用的时候要确认执行的是numpy版本,因为python的内置版本运行速度更慢
多维数组在使用的时候,默认的情况下是返回整个数组的聚合结果,也可以指定沿哪个轴进行聚合
3、其它聚合函数
广播
将一个值扩展或广播一匹配另外一个数组的现状,或两个数组公共的形状
广播的规则
a、如果两个数组的维度不相同,那么小维度数组的现状将会在最左边补1
b、如果两个数组的形状在任何一个维度上都不匹配,那么数组的形状会沿维度为1的维度扩展以匹配另外一个数组的形状
c、如果两个数组的形状在任何一个维度上都不匹配并且没有任何一个维度等于1,那么会引发异常
比较、掩码和布尔逻辑
1、比较操作的使用方法和通用函数类似,当使用比较操作符的时候,numpy内部会使用对应的通用函数
2、操作布尔数组
注:and和or判断的是整个对象的真假,&和|是指每个对象中的比特位
3、布尔数组可以作为索引,从数组中选取值
花哨的索引
传递一组数组索引就可以获得数组中的指定元素
利用花哨的索引,结果的形状与传入的索引数组的形状一致
对于多维度的数组,花哨的索引同样的适用,花哨的索引的返回值是广播后的索引数组的形状
花哨的索引可以和其它索引方案混合适用,且可以使用花哨的索引修改中的值
数组的排序
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自定义结构化数组
上一篇: 车祸
推荐阅读