1. Numpy介绍
- Numpy是一个开源的python科学计算基础库,包含了:
- 一个强大的N维数组对象:ndarray
- 广播功能函数
- 整合C/C++/Fortran代码的工具
- 线性代数、傅里叶变换、随机数生成等功能
- Numpy是SciPy、Pandas等数据处理或科学计算库的基础
- 引用:
import numpy as np
- 功能:主要是用来操作数组和矩阵
- 数据类型:ndarray(N-dimensional array)
2. Numpy的数组对象:ndarray
python已经有列表类型,为什么还需要一个数组对象(类型)?
我们来看看下面的例子:
列表做乘法不会对列表内的元素做乘法,只能通过循环来实现作用于列表的内部元素
再来看看numpy的数组类型:可以直接作用于数组的内部元素
注意!数组对象数据类型需相同(有助于节省运算和存储空间)
2.1 ndarray介绍
- ndrray是一个多维数组对象
- 由实际的数据和描述这些数据的元数据(数据维度、数据类型)构成
- 一般要求所有元素类型相同(同质)
- 数组下标由0开始
2.2 ndarray对象的属性
举例1:
2.3 更改数组维度
注:可以通过修改数组的shape属性,在保持数组元素个数不变的情况下,改变数组轴的属性
2.4 ndarray数组的元素
ndarray的元素类型(查看:.dtype)及其转换(.astype()、.tolist()),可参考链接:
https://baijiahao.baidu.com/s?id=1605931608452741801&wfr=spider&for=pc
ndarray为什么要支持那么多种数据类型?
对元素的精细定义,有助于numpy合理使用存储空间并优化性能
2.5 非同质的ndarray对象(尽量避免使用)
2.6 ndarray数组的创建
- 从python中的列表、元组等类型创建ndarray数组
x = np.array(list/tuple)
#不指定时根据情况关联一个dtype类型
x = np.array((list/tuple, dtype = np.floats32)
- 使用numpy中函数创建ndarray数组
函数 | 说明 |
---|---|
np.empty(shape, (dtype)) | 以随机的方式创建数组 |
np.zeros(shape) | 根据shape创建一个全0数组,shape为数组形式 |
np.zeros_like(a) | 创建和a数组相同格式的数组,且数组元素全为0 |
np.ones_like(a) | 创建和a数组相同格式的数组,且数组元素全为1 |
np.ones(shape) | 根据shape创建一个全1数组,shape为数组形式 |
np.eye(n) | 创建一个n*n的单位矩阵,对角线元素为1,其余元素全为0 |
np.full(shape,val) | 创建一个元素全为val的数组 |
np.full_like(a,val) | 根据a的形状生成一个数组,每个元素都为val |
np.arange(n) | 类似range()函数,返回ndarray类型,元素从0到n-1,不包括终值 |
np.linspace() | 根据起止数据等间距的填充数据形成数组,包括终值 |
np.logspace() | 创建等比数列 |
np.asarray() | 把python中的list或元组转换成numpy的ndarray类型 |
np.random.rand() | 生成随机数组 |
数组的索引、切片与修改元素
- 一维数组的索引、切片以及元素修改(与python列表类似)
- 注:与python列表不同的是,下标范围获取的数组是原数组的一个视图,所以通过下标修改数组也修改了原数组
-
使用整数序列对数组元素进行修改时,原数组不变
-
使用布尔数组对元素进行修改时,原数组改变
注:这种方式只能对应布尔数组,不能对应布尔列表
- 多维数组的索引和切片
Numpy之广播
如何用广播来创建一个数组呢?