NumPy库详细介绍

目录

一.Numpy介绍

[二.工具准备Jupyter Notebook](#二.工具准备Jupyter Notebook)

[编辑模式(按 Enter 进入)](#编辑模式(按 Enter 进入))

[命令模式(按 Esc 进入)](#命令模式(按 Esc 进入))

通用编辑快捷键(和普通编辑器一样)

[三. 创建ndarray数组](#三. 创建ndarray数组)

[1. array()](#1. array())

[2. ones()](#2. ones())

3.zeros()

4.full()

5.eye()

6.linspace()

[7. arange()](#7. arange())

8.random.randint()

9.random.randn()

[10. random.normal()](#10. random.normal())

[11. random.random()](#11. random.random())

12.random.rand()

13.random.uniform()

[四. ndarray属性](#四. ndarray属性)

[五. ndarray基本操作](#五. ndarray基本操作)

[1. 索引操作](#1. 索引操作)

[5.1.1 一维数组索引演示](#5.1.1 一维数组索引演示)

[5.1.2 多维数组索引基本操作演示](#5.1.2 多维数组索引基本操作演示)

[5.1.2 根据索引修改数据](#5.1.2 根据索引修改数据)

[2. 切片操作](#2. 切片操作)

[5.2.1. 一维切片操作](#5.2.1. 一维切片操作)

[5.2.2 二维切片操作(行)](#5.2.2 二维切片操作(行))

[5.2.3 二维切片操作(列)](#5.2.3 二维切片操作(列))

[六. NumPy中常用的其他函数](#六. NumPy中常用的其他函数)

[1. reshape()](#1. reshape())

[2. 级联](#2. 级联)

[6.2.1 np.concatenate()](#6.2.1 np.concatenate())

[6.2.2 hstack()](#6.2.2 hstack())

[6.2.3 vstack()](#6.2.3 vstack())

[3. 切分/ 拆分/ 分割](#3. 切分/ 拆分/ 分割)

[七. 数组的赋值和深拷贝](#七. 数组的赋值和深拷贝)

[1. 数组的赋值](#1. 数组的赋值)

[2. 数组的深拷贝(copy)](#2. 数组的深拷贝(copy))

[八. 常见的聚合函数](#八. 常见的聚合函数)

[1. np.sum()](#1. np.sum())

[2. min / max](#2. min / max)

[3. mean / average](#3. mean / average)

[4 . np.madian()](#4 . np.madian())

[5. np.percentile()](#5. np.percentile())

[6. np.argmin() / np.argmax()](#6. np.argmin() / np.argmax())

[7. np.std()](#7. np.std())

[8. var()](#8. var())

[9. power()](#9. power())

[10. argwhere()](#10. argwhere())

[11. np.sum() / np.nansum()](#11. np.sum() / np.nansum())

[九. 矩阵操作](#九. 矩阵操作)

[1. 基本的矩阵操作](#1. 基本的矩阵操作)

[9.1.1 数和矩阵的运算](#9.1.1 数和矩阵的运算)

[9.1.2 矩阵和矩阵运算(相同维度)](#9.1.2 矩阵和矩阵运算(相同维度))

[​编辑2. 矩乘积(线性代数)](#编辑2. 矩乘积(线性代数))

[9.2.1 np.dot()](#9.2.1 np.dot())

[十. NumPy的广播机制](#十. NumPy的广播机制)

[十一. NumPy其他常用的数学操作](#十一. NumPy其他常用的数学操作)

[十三. NumPy数组的二快速排序](#十三. NumPy数组的二快速排序)

[十四. NumPy文件IO操作](#十四. NumPy文件IO操作)


一.Numpy介绍

Numpy(Numerical Python)是Python的一个开源的数值计算库 。可用来存储和处理大型矩阵,比Python自身的嵌套列表结构要高效的多,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库,包括数学、逻辑、形状操作、排序、选择、输入输出、高散博立叶变换、基本线性代数、基本统计运算和随机模拟等等。

几乎所有从事Python工作的数据分析师都利用NumPy的强大功能。

二.工具准备Jupyter Notebook

Jupyter Notebook(此前被称为Ipython Notebook)是一个交互式笔记本,支持运行40多种编程语言。

Juppyter Notebook 的本质是一个Web应用程序,便于创建和共享文学化程序文档,支持实时代码,教学方程、可视化和markdown。用途包括,数据清洗模拟,统计建模,机器学习等等。

Jupyter notebook: 集文本、代码、图像、公式的展示于一体的超级Python web界面。

下载anaconda运行jupyter notebook 命令就可以启动Jupyter notebook

1.Jupyter Notebook 有两种键盘输入模式

  • 命令模式:键盘输入运行程序命令;这种的单元框线为蓝色
  • 编辑模式:允许你往单元格中键入代码或文本;这时的单元框线是绿色的

2.jupyter Notebook的快捷键

编辑模式 (按 Enter 进入)
快捷键 功能
Tab 代码补全或缩进
Shift + Tab 显示帮助/提示
Shift + Enter 运行本单元,并选中下一个单元
Ctrl + Enter 运行本单元
Alt + Enter 运行本单元,并在下方插入一个新单元

命令模式 (按 Esc 进入)
快捷键 功能
Shift + Enter 运行本单元,并选中下一个单元
Ctrl + Enter 运行本单元
Alt + Enter 运行本单元,并在下方插入一个新单元
Y 把当前单元变成代码单元
M 把当前单元变成Markdown单元(写笔记用)
A 在当前单元上方插入一个新单元
B 在当前单元下方插入一个新单元
DD(按两次 D) 删除当前选中的单元
通用编辑快捷键(和普通编辑器一样)
快捷键 功能
Ctrl + A 全选
Ctrl + Z 撤销
Ctrl + C 复制
Ctrl + V 粘贴
Ctrl + / 注释或取消注释(超级实用!)

三. 创建ndarray数组

ndarray的元素类型规则

  • 默认所有元素类型相同

  • 如果传入列表包含不同类型 ,会自动统一为同一类型

  • 类型转换优先级str > float > int

  • np.array():创建数组(从列表或元组)

  • np.ones():创建全1数组

  • np.zeros():创建全0数组

  • np.full():创建指定值的填充数组

  • np.eye():创建单位矩阵

  • np.linspace():创建等差数列

  • np.arange():创建范围数组(类似range)

  • np.random.randint():生成随机整数

  • np.random.randn():生成标准正态分布随机数

  • np.random.normal():生成正态分布随机数

  • np.random.random():生成[0,1)区间随机数

  • np.random.rand():生成[0,1)区间随机数(可指定形状)

  • np.random.uniform():生成均匀分布随机数

1. array()

使用np.array() 创建拿到ndarray数组,只需要传入参数一个列表或者是元组即可。也可以指定创建元素的类型.

python 复制代码
import numpy as np
a = np.array([1, 2, 3], dtype=np.int64)
print(a, type(a), a.dtype)

2. ones()

np.ones(shape, dtype=None, order='C')

  • 创建一个所有元素都为1的多维数组

参数说明:

  • shape:形状

  • dtype=None:元素类型

  • order:{'C', 'F'},可选,默认值:'C'

    • 是否在内存中以行主(C-风格)或列主(Fortran-风格)顺序存储多维数据,一般默认即可
python 复制代码
# ones()
import numpy as np
a = np.ones((3,3), dtype=np.int64)
print(a)

3.zeros()

np.zeros(shape, dtype=float, order='C')

  • 创建一个所有元素都为0的多维数组

参数说明:

  • shape:形状

  • dtype=None:元素类型

  • order:{'C', 'F'},可选,默认值:'C'

    • 是否在内存中以行主(C-风格)或列主(Fortran-风格)顺序存储多维数据

4.full()

np.full(shape, fill_value, dtype=None, order='C')

  • 创建一个所有元素都为指定元素的多维数组

参数说明:

  • shape:形状

  • fill_value:填充值

  • dtype=None:元素类型

  • order:{'C', 'F'},可选,默认值:'C'

    • 是否在内存中以行主(C-风格)或列主(Fortran-风格)顺序存储多维数据
python 复制代码
import numpy as np
a = np.full((3,3), fill_value=2, dtype=np.int64)
a

5.eye()

np.eye(N, M=None, k=0, dtype=float)

  • 对角线为1,其他位置为0的二维数组,(单位矩阵)

参数说明:

  • N:行数

  • M:列数,默认为None,表示和行数一样

  • k=0:向右偏移0个位置

  • dtype=None:元素类型

k值 效果 示例
k=0 主对角线为1 标准的单位矩阵
k=1 主对角线向右上偏移1 1在右上一条线
k=-1 主对角线向左下偏移1 1在左下一条线
python 复制代码
# esy() 单位矩阵
a = np.eye(5, 6, k = 2)
print(a)

6.linspace()

np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

  • 创建一个等差数列

参数说明:

  • start:开始值

  • stop:结束值

  • num=50:等差数列中默认有50个数

  • endpoint=True:是否包含结束值

  • retstep=False:是否返回等差值(步长)

  • dtype=None:元素类型

python 复制代码
import numpy as np
a, diff = np.linspace(0, 10, 6, True, True)
print(a)
print(diff)

7. arange()

np.arange([start, ]stop, [step, ]dtype=None)

  • 创建一个数值范围的数组

  • 和Python中 range 功能类似

参数说明:

  • start:开始值(可选)

  • stop:结束值(不包含)

  • step:步长(可选)

  • dtype=None:元素类型

python 复制代码
import numpy as np
a = np.arange(0, 10, 2)
print(a)

8.random.randint()

np.random.randint(low, high=None, size=None, dtype='l')

  • 创建一个随机整数的多维数组

参数说明:

  • low:最小值

  • high=None:最大值

    • high=None 时,生成的数值在 [0, low) 区间内

    • 如果使用 high 参数,则生成的数值在 [low, high) 区间

  • size=None:数组形状,默认只输出一个随机值

  • dtype=None:元素类型

python 复制代码
import numpy as np
a = np.random.randint(1, 10, size=(10, 10)) # 左闭右开
print(a)

9.random.randn()

np.random.randn(d0, d1, ..., dn)

  • 创建一个服从标准正态分布的多维数组

标准正态分布(u分布)以 0为均值、1为标准差 的正态分布,记为 N(0, 1)在 0 左右出现的概率最大,越远离 0 出现的概率越低

参数说明:

  • d0, d1, ..., dn:各个维度的数值(即形状参数)
python 复制代码
import numpy as np
a = np.random.randn(10, 10)
a

10. random.normal()

np.random.normal(loc=0.0, scale=1.0, size=None)

  • 创建一个服从正态分布的多维数组

参数说明:

  • loc=0.0:均值,对应着正态分布的中心

  • scale:标准差,对应分布的宽度

    • scale 越大,正态分布的曲线越矮胖

    • scale 越小,曲线越高瘦

  • size=None:数组形状

python 复制代码
import numpy as np
a = np.random.normal(5, 1, (10, 10))
a

11. random.random()

np.random.random(size=None)

  • 创建一个元素为 0~1(左闭右开) 的随机数的多维数组

参数说明:

  • size=None:数组形状
python 复制代码
import numpy as np
a = np.random.random(size = (10, 10))
a

12.random.rand()

np.random.rand(d0, d1, ..., dn)

  • 创建一个元素为 0~1(左闭右开) 的随机数的多维数组

  • np.random.random 功能类似,掌握其中一个即可

参数说明:

  • dn:第 n 个维度的数值
python 复制代码
import numpy as np
a = np.random.rand(5, 5)
a

13.random.uniform()

复制代码
np.random.uniform(low=0.0, high=1.0, size=None)

它的参数非常直观:

  • low: 随机数取值范围的下限,包含该值。默认为0。

  • high: 随机数取值范围的上限,不包含该值。默认为1。

  • size: 输出数组的形状。例如 size=5 会生成5个随机数的一维数组;size=(2, 3) 会生成一个2行3列的二维数组。如果为 None(默认),则只返回一个随机数

python 复制代码
import numpy as np
a = np.random.uniform(1, 10, (5, 5))
a

四. ndarray属性

  • ndim: 维度
  • shape: 形状 (各维度的长度)
  • size: 总长度
  • dtype: 元素类型
  • T: 转置
  • itemsize: 单个元素的字节大小
  • nbytes: 总字节大小

代码演示:

python 复制代码
# 数据构造
import numpy as np
a = np.random.randint(0, 100, (4,5))
print(a)
#  [[89 31 86 66 31]
#  [15 38 31 52 85]
#  [43 95 40 67 94]
#  [29  7 27 57 63]]
python 复制代码
print(f"数组的维度: {a.ndim}")
print(f"数组的形状: {a.shape}")
print(f"数组的总长度: {a.size}")
print(f"数组中元素的类型: {a.dtype}")
print(f"数组转置: {a.T}")
print(f"数组中单个元素的字节大小: {a.itemsize}")
print(f"数组中所有元素总大小: {a.nbytes}")

五. ndarray基本操作

1. 索引操作

一维与列表完全一致,多维的时候同理

格式: 数组名[][]...

简化:数组名[, , ...]

5.1.1 一维数组索引演示

python 复制代码
import numpy as np
a = np.arange(2, 10)
print(a)

# 利用索引取出数字5
print(a[3])
print(a[-5])

5.1.2 多维数组索引基本操作演示

二维:

三维...N维与二维类似

5.1.2 根据索引修改数据

格式: 数组名[行,列] = [, , , ] / n

2. 切片操作

一维与列表完全一致,多维的时候同理

5.2.1. 一维切片操作

5.2.2 二维切片操作(行)

5.2.3 二维切片操作(列)

六. NumPy中常用的其他函数

1. reshape()

作用 :改变数组的形状(维度),不改变数据本身

代码演示1: 把一维数组变为二维数组

代码演示2:使用-1。注意:只能有一个-1的存在。会自动计算

2. 级联

6.2.1 np.concatenate()

是 NumPy 中用于沿现有轴连接数组序列的函数。它可以将多个数组合并成一个更大的数组。

  • 参数是列表或元组

  • 级联的数组维度必须相同

  • 可通过 axis 参数改变级联的方向
    axis=0:沿第0轴(行方向/垂直)连接
    axis=1:沿第1轴(列方向/水平)连接

6.2.2 hstack()

作用 :将多个数组水平方向 (沿第1轴)拼接在一起,即增加列数

6.2.3 vstack()

作用 :将多个数组垂直方向 (沿第0轴)拼接在一起,即增加行数

3. 切分/ 拆分/ 分割

np.split(ary, indices_or_sections, axis=0)

  • ary:要分割的数组

  • indices_or_sections:分割位置或份数

    • 如果是整数,表示均分成几份

    • 如果是列表,表示分割点的位置

  • axis:沿着哪个轴分割,默认0(第1轴)

split 就像切蛋糕:

  • 可以均分(比如把10个元素切成5份,每份2个)

  • 也可以按指定位置切(比如在第2个、第5个后面切一刀)

hsplit() / 与hspilt() 与split() 几乎一样就不演示了。 可以类比这级联来学习。

七. 数组的赋值和深拷贝

1. 数组的赋值

两个数组用的是同一块地址,到修改其中一个数组中元素的时候,另一个也会改变。

2. 数组的深拷贝(copy)

两个数组的地址完全不同修改其他一个数组中的元素,另一个数组不会发生改变。

八. 常见的聚合函数

  • np.sum():计算数组元素之和

  • np.min() / np.max():计算最小值 / 最大值

  • np.mean() / np.average():计算算术平均数 / 加权平均数

  • np.median():计算中位数

  • np.percentile():计算百分位数

  • np.argmin() / np.argmax():返回最小值 / 最大值的索引

  • np.std():计算标准差

  • np.var():计算方差

  • np.power():计算幂次方(逐元素)

  • np.argwhere():返回满足条件的元素的索引

  • np.sum() / np.nansum():计算和 / 忽略NaN值计算和

1. np.sum()

作用:计算数组中元素的和。
np.sum(a, axis=None, dtype=None, keepdims=False, initial=0)

参数说明

  • a:输入数组

  • axis=None:沿着哪个轴求和

    • None:所有元素求和(返回一个数)

    • 0:沿着行方向求和(压缩行)→ 结果长度 = 列数

    • 1:沿着列方向求和(压缩列)→ 结果长度 = 行数

2. min / max

作用:返回数组的最小值(min)、最大值(mxa)
np.min(a, axis=None, out=None)

参数说明

  • a:输入数组

  • axis=None:沿着哪个轴找最小值

    • None:全局最小值(返回一个数)

    • 0:沿着行方向找最小值(每列的最小值)

    • 1:沿着列方向找最小值(每行的最小值)

3. mean / average

  • mean():普通平均(总和 ÷ 个数)

  • average():加权平均(每个数乘以权重后求和 ÷ 权重和)(如果不指定权重,就和 mean 一样)

np.mean(a, axis=None, dtype=None, out=None, keepdims=False)

  • 作用:计算数组元素的算术平均数

    参数说明:

  • a:输入数组

  • axis=None:沿着哪个轴计算平均值

  • dtype:返回结果的数据类型

  • keepdims=False:是否保持原数组的维度

复制代码
np.average(a, axis=None, weights=None, returned=False, keepdims=False)

作用:计算加权平均值(如果不指定权重,就和 mean 一样)

参数说明:

  • a:输入数组

  • axis=None:沿着哪个轴计算

  • weights:权重数组(必须和 a 形状兼容)

  • returned=False:是否同时返回权重和

这里不做区分,只学习求普通平均值

4 . np.madian()

作用 :计算数组元素的中位数

5. np.percentile()

作用 :计算数组元素的百分位数

参数说明

  • a:输入数组

  • q:要计算的百分位数,可以是单个值或列表(0-100之间)

  • axis=None:沿着哪个轴计算

6. np.argmin() / np.argmax()

作用 :返回数组最小值/最大值的索引

参数说明

  • a:输入数组

  • axis=None:沿着哪个轴找

    • None:全局最值索引(数组展平后的位置)

    • 0:每列最值的行索引

    • 1:每行最值的列索引

代码演示:只演示argmin()

7. np.std()

作用 :计算数组元素的标准差

参数说明

  • a:输入数组

  • axis=None:沿着哪个轴计算

还有其他参数先掌握这些即可。

8. var()

作用 :计算数组元素的方差

参数说明

  • a:输入数组

  • axis=None:沿着哪个轴计算

9. power()

作用 :计算 x1x2 次幂(逐元素)

参数说明

  • x1:底数(数组或标量)

  • x2:指数(数组或标量)

10. argwhere()

作用 :返回数组中非零元素的索引(或满足条件的元素位置)

参数说明

  • a:输入数组(可以是布尔数组或条件表达式)

返回值 :形状为 (N, ndim) 的数组,每行是一个索引

代码演示1:返回非零位置的索引

代码演示2:返回符合条件的数据下标

11. np.sum() / np.nansum()

说明: 当数组中存在np.nan 类型的数值的时候可以使用np.nansum() 函数计算和。会自动忽略np.nan类型。

九. 矩阵操作

1. 基本的矩阵操作

加、减、乘、除、整除、取余、平方...

9.1.1 数和矩阵的运算

代码演示:

9.1.2 矩阵和矩阵运算(相同维度)

维度相同的矩阵进行运算:则对应位置的元素进行运算

代码演示:

2. 矩乘积(线性代数)

9.2.1 np.dot()

这个是线性代数中的知识:大家可以去学习一下。上面的图片中也给出了运算方法。
运算的前提: 第一个矩阵的行等于第二个矩阵的列。

注意:线性代数中有很多方法 np.linalg.xxx() , 比如矩阵的秩、逆矩阵、矩阵的行列式等...后面遇到在学习就好了。

十. NumPy的广播机制

广播机制的规则:

  • 规则一:为缺失的维度补维度
  • 规则二:缺失的元素用已有的值补充

如果两数组其中一个数组的维度为(1...) 另外的维度相等则符合广播机制

如果两个数组维度不同,(维度从右对齐,逐一比对)比如: (5, 3, 4)和(3, 4)就符合广播机制。

十一. NumPy其他常用的数学操作

  • np.abs:计算绝对值

  • np.sqrt:计算平方根

  • np.square:计算平方

  • np.exp:计算指数(e的x次方)

  • np.log:计算自然对数

  • np.sin:计算正弦值

  • np.cos:计算余弦值

  • np.tan:计算正切值

  • np.round:四舍五入取整

  • np.ceil:向上取整

  • np.floor:向下取整

  • np.cumsum:计算累积和

十三. NumPy数组的快速排序

np.sort() : 不改变原数组

ndarray.sort() : 改变原数组,不额外占用其他空间在原来数组上进行排序

十四. NumPy文件IO操作

14.1 保存数组

  • save:保存ndarray到一个npy文件
  • savez:将多个array保存到一个npz文件中

代码演示1:save

代码演示2:savez

14.2 读取数据

将上面保存的数组读取出来

14.3 csv, txt 文件的读写操作

还可以读取csv txt文件

代码演示:以读写csv为例。

读取:上面写入文件中的数据

十五. 两个练习题

后面会持续更新.....

相关推荐
love530love3 天前
ComfyUI 报错解决记录:NumPy/SciPy 不兼容与 OpenCV 扩展模块缺失
人工智能·windows·python·opencv·numpy·scipy·layerstyle
程序媛一枚~4 天前
✨✨✨使用Python,OpenCV及图片拼接生成❤️LOVE❤️字样图,每张小图加随机颜色边框,大图加随机大小随机颜色边框
图像处理·python·opencv·numpy·图像拼接
阿拉丁的梦4 天前
Blender的AI模型delaunay三角化拓扑
numpy
cnnews5 天前
在AWS Lambda上部署 tokenizers
python·云计算·numpy·aws·lambda·onnxruntime·tokenizers
清水白石0081 个月前
NumPy 向量化实战指南:从原理到实践的性能革命
python·numpy
Web极客码1 个月前
CentOS 7 删除文件却不释放空间?从 inode、文件描述符到 VFS 的底层原理解析
python·centos·numpy
sheyuDemo1 个月前
关于深度学习的d2l库的安装
人工智能·python·深度学习·机器学习·numpy
deepxuan1 个月前
Day2--python三大库-numpy
开发语言·python·numpy
Flying pigs~~1 个月前
数据分析三剑客之Pandas
大数据·数据库·人工智能·数据分析·numpy·pandas