一、numpy模块
numpy模块可以进行数据的高效处理,提供数组支持,是我们后续学习其他的函数库的基础。
二、numpy的安装与引用
numpy可以通过外部安装方式进行安装,外部安装前的准备工作:准备一台安装了python的联网的计算机。
1、安装numpy库的安装步骤:
1)首先确定准备工作完成
2)按住win+r打开命令提示符,输入cmd按下回车
3)输入以下指令pip install numpy
2、引用numpy库
打开后缀名为.py文件,在程序开始处,输入import numpy
就可以完成numpy库的导入。
三、numpy的数据类型
名称 | 描述 |
---|
bool_ | 布尔型数据类型(True 或者 False) |
int_ | 默认的整数类型(类似于 C 语言中的 long,int32 或 int64) |
intc | 与 C 的 int 类型一样,一般是 int32 或 int 64 |
intp | 用于索引的整数类型(类似于 C 的 ssize_t,一般情况下仍然是 int32 或 int64) |
int8 | 字节(-128 to 127) |
int16 | 整数(-32768 to 32767) |
int32 | 整数(-2147483648 to 2147483647) |
int64 | 整数(-9223372036854775808 to 9223372036854775807) |
uint8 | 无符号整数(0 to 255) |
uint16 | 无符号整数(0 to 65535) |
uint32 | 无符号整数(0 to 4294967295) |
uint64 | 无符号整数(0 to 18446744073709551615) |
float_ | float64 类型的简写 |
float16 | 半精度浮点数,包括:1 个符号位,5 个指数位,10 个尾数位 |
float32 | 单精度浮点数,包括:1 个符号位,8 个指数位,23 个尾数位 |
float64 | 双精度浮点数,包括:1 个符号位,11 个指数位,52 个尾数位 |
complex_ | complex128 类型的简写,即 128 位复数 |
complex64 | 复数,表示双 32 位浮点数(实数部分和虚数部分) |
complex128 | 复数,表示双 64 位浮点数(实数部分和虚数部分) |
四、利用numpy创建数组
下面,我将介绍几种numpy数组的建立:
1.创建指定形状数组
#numpy.empty 方法用来创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组
#语法结构
numpy.empty(shape, dtype = float, order = 'C')
参数说明:
参数 | 描述 |
---|
shape | 数组形状 |
dtype | 数据类型,可选 |
order | 有"C"和"F"两个选项,分别代表,行优先和列优先,在计算机内存中的存储元素的顺序。 |
2.创建以0填充的数组
numpy.zeros(shape, dtype = float, order = 'C')
参数说明:
参数 | 描述 |
---|
shape | 数组形状 |
dtype | 数据类型,可选 |
order | 有"C"和"F"两个选项,分别代表,行优先和列优先,在计算机内存中的存储元素的顺序。 |
3.创建以1填充的数组
numpy.ones(shape, dtype = float, order = 'C')
参数说明:
参数 | 描述 |
---|
shape | 数组形状 |
dtype | 数据类型,可选 |
order | 有"C"和"F"两个选项,分别代表,行优先和列优先,在计算机内存中的存储元素的顺序。 |
4.从已有数组创建数组
numpy.asarray(a, dtype = None, order = None)
参数说明:
参数 | 描述 |
---|
a | 任意形式的输入参数,可以是,列表, 列表的元组, 元组, 元组的元组, 元组的列表,多维数组 |
dtype | 数据类型,可选 |
order | 可选,有"C"和"F"两个选项,分别代表,行优先和列优先,在计算机内存中的存储元素的顺序。 |
5.创建动态数组
numpy.frombuffer(buffer, dtype = float, count = -1, offset = 0)
参数说明:
参数 | 描述 |
---|
buffer | 可以是任意对象,会以流的形式读入。 |
dtype | 返回数组的数据类型,可选 |
count | 读取的数据数量,默认为-1,读取所有数据。 |
offset | 读取的起始位置,默认为0。 |
6.迭代创建数组
numpy.fromiter(iterable, dtype, count=-1)
参数说明:
参数 | 描述 |
---|
iterable | 可迭代对象 |
dtype | 返回数组的数据类型 |
count | 读取的数据数量,默认为-1,读取所有数据 |
7.创建数值范围的数组
numpy.arange(start, stop, step, dtype)
参数说明:
参数 | 描述 |
---|
start | 起始值,默认为0 |
stop | 终止值(不包含) |
step | 步长,默认为1 |
dtype | 返回ndarray 的数据类型,如果没有提供,则会使用输入数据的类型。 |
8.创建一个一维等差数列数组
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
参数说明:
参数 | 描述 |
---|
start | 序列的起始值 |
stop | 序列的终止值,如果endpoint 为true ,该值包含于数列中 |
num | 要生成的等步长的样本数量,默认为50 |
endpoint | 该值为 true 时,数列中包含stop 值,反之不包含,默认是True。 |
retstep | 如果为 True 时,生成的数组中会显示间距,反之不显示。 |
dtype | ndarray 的数据类型 |
9.创建一个等比数列的数组
np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
参数说明:
参数 | 描述 |
---|
start | 序列的起始值为:base ** start |
stop | 序列的终止值为:base ** stop。如果endpoint 为true ,该值包含于数列中 |
num | 要生成的等步长的样本数量,默认为50 |
endpoint | 该值为 true 时,数列中中包含stop 值,反之不包含,默认是True。 |
base | 对数 log 的底数。 |
dtype | ndarray 的数据类型 |
例程
import numpy
a=numpy.array([1,2,3])
b=numpy.array([1,2,3],[1,2,3])
numpy.zeros(行,列)
numpy.ones(行,列)
numpy.full((行,列),填充元素)
numpy.eye(维度X)
numpy.random.random(行,列)
五、numpy数组操作
1.修改数组
函数 | 语法 | 描述 |
---|
reshape | numpy.reshape(arr, newshape, order=‘C’) | 不改变数据的条件下修改形状 |
flat | for i in a.flat | 数组元素迭代器 |
flatten | ndarray.flatten(order=‘C’) | 返回一份数组拷贝,对拷贝所做的修改不会影响原始数组 |
ravel | numpy.ravel(a, order=‘C’) | 返回展开数组 |
2.翻转数组
函数 | 语法 | 描述 |
---|
transpose | numpy.transpose(arr, axes) | 对换数组的维度 |
ndarray.T | a.T | 和 self.transpose() 相同 |
rollaxis | numpy.rollaxis(arr, axis, start) | 向后滚动指定的轴 |
swapaxes | numpy.swapaxes(arr, axis1, axis2) | 对换数组的两个轴 |
3.修改数组维度
维度 | 语法 | 描述 |
---|
broadcast | numpy.broadcast(x,y) | 产生模仿广播的对象 |
broadcast_to | numpy.broadcast_to(array, shape, subok) | 将数组广播到新形状 |
expand_dims | numpy.expand_dims(arr, axis) | 扩展数组的形状 |
squeeze | numpy.squeeze(arr, axis) | 从数组的形状中删除一维条目 |
4.连接数组
函数 | 语法 | 描述 |
---|
concatenate | numpy.concatenate((a1, a2, …), axis) | 连接沿现有轴的数组序列 |
stack | numpy.stack(arrays, axis) | 沿着新的轴加入一系列数组。 |
hstack | numpy.hstack(arrays, axis) | 水平堆叠序列中的数组(列方向) |
vstack | numpy.vstack(arrays, axis) | 竖直堆叠序列中的数组(行方向) |
5.分割数组
函数 | 语法 | 数组及操作 |
---|
split | numpy.split(ary, indices_or_sections, axis) | 将一个数组分割为多个子数组 |
hsplit | numpy.hsplit(ary, indices_or_sections, axis) | 将一个数组水平分割为多个子数组(按列) |
vsplit | numpy.vsplit(ary, indices_or_sections, axis) | 将一个数组垂直分割为多个子数组(按行) |
6.数组元素的添加与删除
函数 | 语法 | 元素及描述 |
---|
resize | numpy.resize(arr, shape) | 返回指定形状的新数组 |
append | numpy.append(arr, values, axis=None) | 将值添加到数组末尾 |
insert | numpy.insert(arr, obj, values, axis) | 沿指定轴将值插入到指定下标之前 |
delete | Numpy.delete(arr, obj, axis) | 删掉某个轴的子数组,并返回删除后的新数组 |
unique | numpy.unique(arr, return_index, return_inverse, return_counts) | 查找数组内的唯一元素 |
六、numpy的位操作
函数 | 语法 | 描述 |
---|
bitwise_and | numpy.bitwise_and(num1,num2) | 对数组元素执行位与操作 |
bitwise_or | numpy.bitwise_or(num1,num2) | 对数组元素执行位或操作 |
invert | numpy.invert(num) | 按位取反 |
left_shift | numpy.left_shift(num,num1) | 向左移动二进制表示的位 |
right_shift | numpy.right_shift(num,num1) | 向右移动二进制表示的位 |
七、NumPy 字符串函数
以下函数用于对 dtype 为 numpy.string_ 或 numpy.unicode_ 的数组执行向量化字符串操作。 它们基于 Python 内置库中的标准字符串函数。
这些函数在字符数组类(numpy.char)中定义。
函数 | 描述 |
---|
add() | 对两个数组的逐个字符串元素进行连接 |
multiply() | 返回按元素多重连接后的字符串 |
center() | 居中字符串 |
capitalize() | 将字符串第一个字母转换为大写 |
title() | 将字符串的每个单词的第一个字母转换为大写 |
lower() | 数组元素转换为小写 |
upper() | 数组元素转换为大写 |
split() | 指定分隔符对字符串进行分割,并返回数组列表 |
splitlines() | 返回元素中的行列表,以换行符分割 |
strip() | 移除元素开头或者结尾处的特定字符 |
join() | 通过指定分隔符来连接数组中的元素 |
replace() | 使用新字符串替换字符串中的所有子字符串 |
decode() | 数组元素依次调用str.decode |
encode() | 数组元素依次调用str.encode |
八、数学函数
函数 | 描述 |
---|
sin() | 正弦函数 |
cos() | 反弦函数 |
tan() | 正切函数 |
arcsin() | 反正弦函数 |
arccos() | 反反弦函数 |
arctan() | 反正切函数 |
degrees() | 将弧度转换为角度 |
around(a,decimals) | 返回指定数字的四舍五入值 |
floor() | 返回小于或者等于指定表达式的最大整数 |
ceil() | 返回大于或者等于指定表达式的最小整数 |
add() | 两个数组相加 |
subtract() | 两个数组相减 |
multiply() | 两个数组相乘 |
divide() | 两个数组相除 |
reciprocal() | 函数返回参数逐元素的倒数 |
power() | 函数将第一个输入数组中的元素作为底数,计算它与第二个输入数组中相应元素的幂 |
mod() | 计算输入数组中相应元素的相除后的余数 |
九、统计函数
函数 | 描述 |
---|
amin() | 用于计算数组中的元素沿指定轴的最小值 |
amax() | 用于计算数组中的元素沿指定轴的最大值 |
ptp() | 函数计算数组中元素最大值与最小值的差(最大值 - 最小值) |
percentile() | 百分位数是统计中使用的度量,表示小于这个值的观察值的百分比 |
median() | 函数用于计算数组 a 中元素的中位数(中值) |
mean() | 函数返回数组中元素的算术平均值 |
average() | 函数根据在另一个数组中给出的各自的权重计算数组中元素的加权平均值 |
十、排序、条件刷选函数
NumPy 提供了多种排序的方法。 这些排序函数实现不同的排序算法,每个排序算法的特征在于执行速度,最坏情况性能,所需的工作空间和算法的稳定性。 下表显示了三种排序算法的比较。
种类 | 速度 | 最坏情况 | 工作空间 | 稳定性 |
---|
quicksort(快速排序) | 1 | O(n^2) | 0 | 否 |
mergesort(归并排序) | 2 | O(n*log(n)) | ~n/2 | 是 |
heapsort(堆排序) | 3 | O(n*log(n)) | 0 | 否 |
1.msort、sort_complex、partition、argpartition
函数 | 描述 |
---|
msort(a) | 数组按第一个轴排序,返回排序后的数组副本。np.msort(a) 相等于 np.sort(a, axis=0)。 |
sort_complex(a) | 对复数按照先实部后虚部的顺序进行排序。 |
partition(a, kth[, axis, kind, order]) | 指定一个数,对数组进行分区 |
argpartition(a, kth[, axis, kind, order]) | 可以通过关键字 kind 指定算法沿着指定轴对数组进行分区 |
2.argmax() 、argmin()、nonzero() 、where()、extract()
函数 | 描述 |
---|
argmax() | 沿给定轴返回最大元素的索引 |
argmin() | 沿给定轴返回最小元素的索引 |
nonzero() | 返回输入数组中非零元素的索引 |
where() | 返回输入数组中满足给定条件的元素的索引 |
extract() | 根据某个条件从数组中抽取元素,返回满条件的元素 |
十一、视图、副本和矩阵库
函数 | 描述 |
---|
view() | 创建一个新的数组对象,该方法创建的新数组的维数变化不会改变原始数据的维数 |
copy() | 创建一个副本。 对副本数据进行修改,不会影响到原始数据,它们物理内存不在同一位置 |
a.T | 转置数组 |
empty() | 返回一个新的矩阵 |
zeros() | 创建一个以 0 填充的矩阵 |
matlib.ones() | 创建一个以 1 填充的矩阵 |
matlib.eye() | 返回一个单位矩阵,对角线元素为 1,其他位置为零 |
matlib.identity() | 返回给定大小的单位矩阵 |
matlib.rand() | 创建一个给定大小的矩阵,数据是随机填充的 |
十二、NumPy 线性代数
NumPy 提供了线性代数函数库 linalg,该库包含了线性代数所需的所有功能,可以看看下面的说明:
函数 | 语法 | 描述 |
---|
dot | numpy.dot(a, b, out=None) | 两个数组的点积,即元素对应相乘。 |
vdot | numpy.vdot(a,b) | 两个向量的点积 |
inner | numpy.inner(a,b) | 两个数组的内积,一维数组的内积 |
matmul | numpy.matmul(a,b) | 两个数组的矩阵积 |
determinant | numpy.linalg.det(a) | 数组的行列式 |
solve | numpy.linalg.solve() | 求解线性矩阵方程 |
inv | numpy.linalg.inv() | 计算矩阵的乘法逆矩阵 |
十三、numpy的IO
函数 | 方法 | 描述 |
---|
save() | numpy.save(file, arr, allow_pickle=True, fix_imports=True) | 将数组保存到以 .npy 为扩展名的文件中 |
savez() | numpy.savez(file, *args, **kwds) | 将多个数组保存到以 npz 为扩展名的文件中 |
savetxt() | np.savetxt(FILENAME, a, fmt="%d", delimiter=",") | 以简单的文本文件格式存储数据,对应的使用 loadtxt() 函数来获取数据 |