Numpy 的核心是 ndarray 对象,包含了多维数组以及多维数组的操作;
一、ndarray
1、构建ndarray
np.array(object, dtype=None)
object:转换的数据
dtype:数据元素的数据类型(int、float等)
import numpy as np
#全部行都能输出
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
2、数据类型
2.1、查看数据类型
2.2、基本数据类型
2.3、向上转换规则
NumPy 数组必须包含同一类型的数据。如果类型不匹配,NumPy 将会向上转换(如果可行)。
确保数据完整性:整数->小数->字符串
2.4、指定类型创建
字符型转化为数值型,将报错;
2.5、类型转换
- 第一种方式: ndarray.astype("数据类型名")
- 第二种方式: ndarray.astype(np.数据类型名)
3、Numpy 的矢量化(向量化)功能
二、常用数组
1、全0数组
np.zeros(shape,dtype)/np.zeros_like(a)
2、全1数组
np.ones(shape, dtype)/np.ones_like(a)
3、全n数组
np.full(shape, full_value)/np.full_like(a, full_value))
4、单位数组
np.eye(n,m,k)
n行数,m列数,k偏移量
返回一个二维数组,其中对角线为1,零点为零的二维数组
5、空值和无群大
np.nan、np.inf 都是浮点类型;
数组中如何有一个数据是空值,那么所有的数据都只能是浮点型;
6、随机数组
6.1、随机整数数组
6.2、随机小数数组
返回在区间[0,1)范围中的随机浮点数
6.3、正态分布
a、标准正态分布:
b、正态分布:
- np.random.normal(loc,scale,size)
- loc为均值,scale为标准差,size为数组形状
- 如果平均值和标准差为0和1,或者不写这两个参数,就等同于np.random.randn()
7、随机种子
np.random.seed(Num)可以设置一组种子值,确保每次程序执行都可以生成同样的随机数组。
8、线性序列
8.1、np.arange()
创建一个线性序列数组,给定间隔内返回均匀间隔的值,可以设置开始位置,终止位置和步长。
8.2、np.linspace()
创建一个线性序列数组,给定间隔内返回均匀间隔的值,设置开始位置和终止位置以及产生数量。
三、nddaray常用属性
- 查看数组形状:a.shape
- 查看维度:a.nidm
- 查看数组元素个数:a.size
- 查看元素字节大小:a.itemsize
四、数组的切片和索引
4.1、多维数组的索引
4.2、修改某一个元素的值
ndarry的形状无法修改,个数固定了,所以长度必须对应;
列表也可以通过索引来修改数据,但是长度不用固定;
五、深拷贝&浅拷贝
1、浅拷贝
浅拷贝:指向同一块内存,修改其中任何一个数组,都修改了原内存;
1.1、直接赋值
1.2、切片情况
1.3、使用view创建一个视图(浅复制)
2、深拷贝
深拷贝:创建新的内存,与原内存可单独修改;
方法:a.copy()
六、数组的操作
1、数组的变形
1.1、reshape
元素个数不变,返回新数组,不会对原数组做改变;
1.2、resize
元素个数可变,在原数组基础上做改变;
1.3、ravel
返回新数组;
1.4、转置
返回新数组
2、数组的拼接
- concatenate((a1, a2, ...), axis)
- axis指定沿着哪个轴进行拼接,默认0轴
- 0轴拼接保列数相同(行拼接),1轴拼接保行数相同(列拼接)
3、数组的拆分
np.split(arr,indices_or_sections,axis)
- indices_or_sections:int或1-D数组。
- 如果indices_or_sections是一个整数N,则数组将被分割沿着'轴'进入N个相等的数组。
- 如果indices_or_sections是排序整数的1-D数组,则为条目指示数组被分割的“轴”的位置。
- 如果索引超过沿“轴”的数组维度,相应地返回一个空的子数组。
七、广播机制
- 规则1:如果两个数组形状中,只有其中一个维度相同,另一个维度不一致,但是其中一个数组有维度为1,则可以补齐
- 规则2:如果两个数组的形状在任何一个维度都不匹配,但两个数组都有其中以维度为1,则数组的形状会沿着维度为1的维度扩展,以匹配另外一个数组形状。
- 规则3:如果两个数组的形状在任何一个维度上都不匹配,并且没有任何一个维度等于1,会广播错误。
八、numpy的运算
Numpy 中数组上的算术运算符使用元素级别。最后的结果使用新的一个数组来返回。
1、基本运算
如果需要修改现有数组,而不是创建新数组,应该使用等号进行赋值。
2、常用函数
3、规约函数
4、Numpy的快速排序
4.1、np.sort()
4.2、np.argsort()
返回将对此数组进行排序的索引。