NumPy学习笔记

1. 简介

版本1.15.4

NumPy是一个Python科学计算的基础包,包含了多维数组对象(multidemensional array object)和诸如矩阵等多种衍生对象,然后基于此进行数学计算、逻辑计算、维度改变、排序、筛选、输入输出、离散傅里叶变换、基础线性代数、基础统计操作、随机模拟等等一系列操作。

NumPy和Python内置序列的区别
  • NumPy中的数组在创建的时候长度是固定的,修改长度会新建数组、删除原有数组;
  • NumPy数组中的元素必须属于同一类型,对象数组除外;
  • NumPy数组帮助实现大量数据的高级数学计算和其他类型操作,并且执行的效率比Python内置序列要更高;
  • 越来越多的Python包都开始基于NumPy并且处理数据时都直接返回NumPy数组,所以掌握NumPy是非常有必要的

2. ndarray

NumPy的核心数据结构是一个包含同类型数据的多维数组ndarray,因为维度可能较高,所以常常使用一个包含正整数的元组进行索引,NumPy中维度又称“轴”(axis,复数是axes)

属性解释
ndarray.ndim返回ndarray的轴数
ndarray.shape以元组的形式返回ndarray的维度
ndarray.size返回ndarraty中元素的总数,相当于ndarray.shape中各个数字的乘积
ndarray.dtype返回ndarray中元素的类型,常见的有numpy.int32, numpy.float32, numpy.float64
ndarray.itemsize返回ndarray中元素所占的字节数
ndarray.data不建议使用
2.1 创建

(1)直接将Python的列表或者元组(二者嵌套也可以)转换为多维数组;(适用于中小型数据的人工构建)

(2)**使用NumPy初始化函数,**通过占位符内容来初始化ndarray。(偏向大型数据的自动构建)

(3)从磁盘、标准格式、自定义格式中读取ndarray

(4)从字符串或缓存中创建

(5)使用特殊的库函数,比如random

函数解释
zeros(shape)/zeros_like()构建全0数组
ones(shape)/ones_like()构建全1数组
empty(shape)/empty_like()构建随机数组
arange(a, b, c)类似Python中range()的构建方法,a,b,c分别代表起始值、终止值、步长/方向
linspace(a, b, c)同上,只不过c不代表步长,而代表在a与b之间生成数字的个数
random.random(shape)创建指定维度的随机数组,元素为0到1之间
random.rand()(**待补充**)
random.randn()(**待补充**)
fromfunction()(**待补充**)
fromfile()(**待补充**)
2.2 元素级运算
函数解释
max(axis)/min(axis)统计最值
sum(axis)求和
np.exp(ndarray)计算自然指数
np.sqrt(ndarray)计算平方根
np.add(ndarray1, ndarray2)元素级数组相加,相当于ndarray1+ndarray2
np.floor(ndarray)计算小于的最大整数
np.ceil(ndarray)计算大于的最小整数
2.3 更改维度
函数名解释
ndarray.ravel()将多维数组压成一个一维数组,并返回
ndarray.reshape(shape)将ndarray调整为指定的维度并返回,reshape([3, 4])或者reshape(3, 4)都可以,如果是reshape(3, -1)则表示最后一个轴自动计算
ndarray.resize(shape)原地方法,和reshape稍有不同
ndarray.T矩阵的转置
ndarray[:, newaxis]加一个轴,需要导入from numpy import newaxis
2.4 连接
函数名解释
np.vstack((ndarray1, ndarray2))竖直堆积,对于二维数组等价于row_stack()
np.hstack((ndarray1, ndarray2))水平堆积,对于二维数组等价于column_stack()
np.c()沿着第二个轴将切片对象连接在一起
np.r()沿着第一个轴将切片对象连接在一起
2.5 分割
函数名解释
hsplit(ndarray, 3)将ndarray水平分割为三个大小相同的多维数组
hsplit(ndarray, (3, 4))将ndarray水平分割为三个子数组,切割位置为第三列、第四列
vsplit()依次类推
2.6 复制与视图

复制分为深复制和浅复制两种,由于NumPy中的==运算符会产生布尔数组,所以常用is来区分二者。

NumPy中的深浅复制和其余语言不同,为了统一,在这里稍作修改:深复制得到的变量的值发生变化会引起原变量的值的变化,而浅复制则相反。

(1)赋值操作不是复制

执行了a = b那么a is b一定成立

(2)view()和base

ndarray的切片其实就是创建一个视图,而视图其实生成了一个新的数组对象,只不过在产生的过程中视图窗口中的数据保持不变,需要注意的是修改视图中的数据等价于修改原数据(修改视图的维度和数据类型除外)。

(3)copy()实现浅复制

copy()函数得到的是一个独立的数组对象副本,对此副本的所有操作,都将和原来数组无关。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值