目录
[二、 Numpy使用](#二、 Numpy使用)
[2.1 numpy介绍:](#2.1 numpy介绍:)
[2.2 ndarray](#2.2 ndarray)
[创建一维数组 和 二维数组](#创建一维数组 和 二维数组)
[数组形状设置行列数 以及填充内容 np.zeros() 和 np.ones()](#数组形状设置行列数 以及填充内容 np.zeros() 和 np.ones())
[np.empty() 进行快速构建, 但是数组内容都是随机值](#np.empty() 进行快速构建, 但是数组内容都是随机值)
[np.full 指定进行填充满;](#np.full 指定进行填充满;)
[np.zeros_like(); 创建形状一样 但是全填充0](#np.zeros_like(); 创建形状一样 但是全填充0)
[np.full_like (arr, 2); 指定填充](#np.full_like (arr, 2); 指定填充)
[np.arange(start, end, temp)等差数列](#np.arange(start, end, temp)等差数列)
[np.linspace(start, end, temp) # 把前面数字均匀分成temp 等份 其中start 跟 end是左闭 右闭](# 把前面数字均匀分成temp 等份 其中start 跟 end是左闭 右闭)
[np.logspace(a, b, n, base = k) 对数间隔数列](#np.logspace(a, b, n, base = k) 对数间隔数列)
[生成单位矩阵 和 对角矩阵](#生成单位矩阵 和 对角矩阵)
[生成随机数 np.random.rand()](#生成随机数 np.random.rand())
[ndarray 的数据类型](#ndarray 的数据类型)
[一维数组 的索引与切片](#一维数组 的索引与切片)
[原始列表就不可以直接向numpy一样相加 否则就是拼接了](#原始列表就不可以直接向numpy一样相加 否则就是拼接了)
[矩阵相乘 a @ b](#矩阵相乘 a @ b)
[计算指数 e^x np.exp()](#计算指数 e^x np.exp())
[计算自然对数 lnX np.log()](#计算自然对数 lnX np.log())
[计算正弦值 和 余弦值 np.sin() 和 np.cos()](#计算正弦值 和 余弦值 np.sin() 和 np.cos())
[计算绝对值 np.abs([])](#计算绝对值 np.abs([]))
[计算a的b次幂 np.power([], 3)](#计算a的b次幂 np.power([], 3))
[四舍五入 但是.5 在python中会舍掉 np.round([])](#四舍五入 但是.5 在python中会舍掉 np.round([]))
[向上 和 向下取整 np.ceil([]) 和 np.floor([])](#向上 和 向下取整 np.ceil([]) 和 np.floor([]))
[数组求和 np.sum([])](#数组求和 np.sum([]))
[计算中位数 排序后中间的数](#计算中位数 排序后中间的数)
计算标准差(np.std([]))和方差(np.var([]))
[计算最大值和最小值max([]) min([])](#计算最大值和最小值max([]) min([]))
[计算分位数(np.percentile([], 25)) 和 中位数(np.median([]))](#计算分位数(np.percentile([], 25)) 和 中位数(np.median([])))
[计算累积和(np.cumsum([])) 累积积(np.cumprod([]))](#计算累积和(np.cumsum([])) 累积积(np.cumprod([])))
[是否大于(np.greater([], 4))、小于(np.less([], 4))、等于(np.eqaul([]), 4)](#是否大于(np.greater([], 4))、小于(np.less([], 4))、等于(np.eqaul([]), 4))
[逻辑与或非(np.logical_and([], []); np.logical_or([], []); np.logical_not([[]))](#逻辑与或非(np.logical_and([], []); np.logical_or([], []); np.logical_not([[])))
[检查元素是否至少有一个为true (np.any([]))检查是否全部元素为true (np.all([]))](#检查元素是否至少有一个为true (np.any([]))检查是否全部元素为true (np.all([])))
[自定义条件(np.where(条件, 符合条件, 不符合条件))](#自定义条件(np.where(条件, 符合条件, 不符合条件)))
[np.where() 可以进行嵌套](#np.where() 可以进行嵌套)
[np.select() 可以达到跟np.where()嵌套之后相同的效果](#np.select() 可以达到跟np.where()嵌套之后相同的效果)
[排序函数 arr.sort() 或者 np.sort(arr)](#排序函数 arr.sort() 或者 np.sort(arr))
[去重函数 可以用作找唯一值 np.unique(arr)](#去重函数 可以用作找唯一值 np.unique(arr))
[数组的水平拼接 np.concatenate(arr1, arr2)](#数组的水平拼接 np.concatenate(arr1, arr2))
[数组的分割 np.split(arr, [6, 12, 18]) 在[6, 12, 18] 里面进行下刀](#数组的分割 np.split(arr, [6, 12, 18]) 在[6, 12, 18] 里面进行下刀)
[可以将一维数组 转换成二维数组; 也可以进行数组的垂直拼接!!](#可以将一维数组 转换成二维数组; 也可以进行数组的垂直拼接!!)
[调整数组的形状 np.reshape(arr, [4, 5]) 必须要进行等分 每一行的个数都要相等](#调整数组的形状 np.reshape(arr, [4, 5]) 必须要进行等分 每一行的个数都要相等)
一、学前安装
- 下载anaconda Navigator

- 在anaconda Navigator 中 下载jupyter 安装pycharm


- 打开pycharm选择创建jupyter 文件即可。

- 第一个jupyter程序, 写好就可以运行了!

二、 Numpy使用
2.1 numpy介绍:
说人话就是:
"Python 版的高级计算器 + 数据容器":
它主要是提供了一个叫 "多维数组" 的东西(比如列表的升级版,能存表格、矩阵这类复杂数据),还带了一堆现成的功能:能快速算数学题、排数据、处理文件,甚至能做线性代数、傅里叶变换这些复杂运算,连随机数生成都能直接用。
最方便的是,用它不用自己写循环,直接就能对整堆数据做计算,还能和 C、C++ 写的代码配合用,又快又省内存。
2.2 ndarray
2.2.1 Numpy 数组(ndarray)的核心特点就是:
- 能存复杂数据:不仅能存单个数字、一串数字,还能存表格、三维模型数据这类多层结构;
- 里面东西得一样:数组里要么全是数字,要么全是字符串,不能混着来;
- 用起来又快又省空间:数据存在连续的内存里,算的时候不用一个个循环,能一次性对一堆数据做运算。
创建一维数组 和 二维数组

2.2.2 同质性:会强制类型转换 只让数组内都是同一种类型的数据

2.2.3 ndarray属性
| 属性名称 | 通俗解释 | 使用示例 |
|---|---|---|
| shape | 数组的形状:行数和列数(或更高维度的尺寸)。 | arr.shape |
| ndim | 维度数量:数组是几维的(1 维、2 维、3 维等)。 | arr.ndim |
| size | 总元素个数:数组中所有元素的总数。 | arr.size |
| dtype | 元素类型:数组中元素的类型(整数、浮点数等)。 | arr.dtype |
| T | 转置:行变列,列变行。 | arr.T |
| itemsize | 单个元素占用的内存字节数。 | arr.itemsize |
| nbytes | 数组总内存占用量:size * itemsize。 | arr.nbytes |
| flags | 内存存储方式:是否连续存储(高级优化)。 | arr.flags |

2.2.4 ndarray 的创建
- 基础构造:手动攒小数据组,或者复制现成的数据。
- 预定义形状填充:快速弄个固定大小的数组(比如全填 0 占位置,或全填 1 当初始值)。
- 基于值范围生成:按顺序生成一串数,比如模拟时间、画坐标网格时用。
- 特殊矩阵生成:专门用来做数学计算的数组(比如那种 "对角线是 1、其他是 0" 的矩阵)。
- 随机数组生成:造一堆随机数,比如模拟实验数据、给 AI 模型初始化参数时用。
- 高级构造方法:处理文件、字符串这类乱数据,或者用函数生成复杂的数组。
预定义形状:
创建一个数组和复制(copy)一个数组

数组形状设置行列数 以及填充内容 np.zeros() 和 np.ones()

np.empty() 进行快速构建, 但是数组内容都是随机值

np.full 指定进行填充满;
np.zeros_like(); 创建形状一样 但是全填充0
np.full_like (arr, 2); 指定填充

np.arange(start, end, temp)等差数列

np.linspace(start, end, temp) # 把前面数字均匀分成temp 等份 其中start 跟 end是左闭 右闭

np.logspace(a, b, n, base = k) 对数间隔数列
# 步骤 1:先确定 “对数的间隔”:从 0 到 4,分 3 个数,间隔是(4-0)/(3-1)=2 → 对数分别是0、2、4
# 间隔都得是 (b-a)÷(n-1)
# 步骤 2:算 2 的这几个对数的次方:2⁰=1,2²=4,2⁴=16

矩阵
| 名称 | 维度 | 示例 | 备注 |
|---|---|---|---|
| 标量 | 0 维 | 5, 3.14 | 单个数字,无行列 |
| 向量 | 1 维 | [1, 2, 3] | 只有行或列(一维数组) |
| 矩阵 | 2 维 | [[1, 2], [3, 4]] | 严格的行列结构(二维表) |
| 张量 | ≥3 维 | [[[1, 2], [3, 4]]] | 高阶数组(如 RGB 图像) |
特殊矩阵
| 矩阵类型 | 定义 | 例子 |
|---|---|---|
| 零矩阵 | 所有元素为 0 | [0000] |
| 单位矩阵 | 对角线上为 1,其余为 0 | [1001] |
| 对角矩阵 | 只有对角线有非零值 | [2003] |
| 对称矩阵 | A=AT(矩阵与自身的转置相等) | [1223] |
生成单位矩阵 和 对角矩阵

生成随机数 np.random.rand()

生成随机浮点数

生成随机整数

生成随机数正太分布

设置随机数种子

ndarray 的数据类型
| 数据类型 | 说明 |
|---|---|
| bool | 布尔类型 |
| int8、uint8 | 有符号、无符号的 8 位(1 字节)整型 |
| int16、uint16 | 有符号、无符号的 16 位(2 字节)整型 |
| int32、uint32 | 有符号、无符号的 32 位(4 字节)整型 |
| int64、uint64 | 有符号、无符号的 64 位(8 字节)整型 |
| float16 | 半精度浮点型 |
| float32 | 单精度浮点型 |
| float64 | 双精度浮点型 |
| complex64 | 用两个 32 位浮点数表示的复数 |
| complex128 | 用两个 64 位浮点数表示的复数 |

索引 和 切片
一维数组 的索引与切片

二维数组的索引与切片

ndarray的运算

原始列表就不可以直接向numpy一样相加 否则就是拼接了

二维矩阵运算

广播机制

矩阵相乘 a @ b

2.3 Numpy 常用函数
| 分类 | 函数列表 |
|---|---|
| 基本数学 | np.sqrt(x)、np.exp(x)、np.log(x)、np.sin(x)、np.abs(x)、np.power(a, b)、np.round(x, n) |
| 统计 | np.sum(x)、np.mean(x)、np.median(x)、np.std(x)、np.var(x)、np.min(x)、np.max(x)、np.percentile(x, q) |
| 比较与去重 | np.greater(a, b)、np.less(a, b)、np.equal(a, b)、np.logical_and(a, b)、np.where(condition, x, y)、np.unique(x)、np.in1d(a, b) |
| 其他与排序 | np.concatenate((a, b))、np.split(x, indices)、np.reshape(x, shape)、np.copy(x)、np.isnan(x)、np.sort(x)、.x.sort()、np.argsort(x)、np.lexsort(keys) |
算术平方根

计算指数 e^x np.exp()

计算自然对数 lnX np.log()

计算正弦值 和 余弦值 np.sin() 和 np.cos()

计算绝对值 np.abs([])

计算a的b次幂 np.power([], 3)

四舍五入 但是.5 在python中会舍掉 np.round([])

向上 和 向下取整 np.ceil([]) 和 np.floor([])

检测缺失值np.isnan([])

统计函数

数组求和 np.sum([])

计算平均值np.mean([])

计算中位数 排序后中间的数

计算标准差(np.std([]))和方差(np.var([]))

计算最大值和最小值max([]) min([])

计算分位数(np.percentile([], 25)) 和 中位数(np.median([]))

计算累积和(np.cumsum([])) 累积积(np.cumprod([]))

比较函数
是否大于(np.greater([], 4))、小于(np.less([], 4))、等于(np.eqaul([]), 4)

逻辑与或非(np.logical_and([], []); np.logical_or([], []); np.logical_not([[]))

检查元素是否至少有一个为true (np.any([]))
检查是否全部元素为true (np.all([]))

自定义条件(np.where(条件, 符合条件, 不符合条件))

np.where() 可以进行嵌套

np.select() 可以达到跟np.where()嵌套之后相同的效果

排序函数 arr.sort() 或者 np.sort(arr)

去重函数 可以用作找唯一值 np.unique(arr)

数组的水平拼接 np.concatenate(arr1, arr2)

数组的分割 np.split(arr, [6, 12, 18]) 在[6, 12, 18] 里面进行下刀

可以将一维数组 转换成二维数组; 也可以进行数组的垂直拼接!!
调整数组的形状 np.reshape(arr, [4, 5]) 必须要进行等分 每一行的个数都要相等

综合练习
- 某城市一周的最高气温(℃)为 [28, 30, 29, 31, 32, 30, 29]。
- 计算平均气温、最高气温和最低气温。
- 找出气温超过 30℃ 的天数。

- 某班级 5 名学生的数学成绩为 [85, 90, 78, 92, 88]。
- 计算成绩的平均分、中位数和标准差。
- 将成绩转换为百分制(假设满分为 100)。



- 生成一个 (3, 4) 的随机整数数组,范围 [0, 10)。
- 计算每列的最大值和每行的最小值。
- 将数组中的所有奇数替换为 -1。


- 创建一个 1 到 12 的一维数组,并转换为(3,4)的二维数组。
- 计算每行的和与每列的平均值。
- 将数组展平为一维数组。

- 生成一个(5,5)的随机数组,范围 [0,20)。
- 找出数组中大于 10 的元素。
- 将所有大于 10 的元素替换为 0。

- 某公司 6 个月的销售额(万元)为 [120, 135, 110, 125, 130, 140]。
- 计算销售额的总和、均值和方差。
- 找出销售额最高的月份和最低的月份。

- 给定 \(A = [1, 2, 3]\) 和 \(B = [4, 5, 6]\)。
- 将 A 和 B 水平拼接为一个新数组。
- 将 A 和 B 垂直拼接为一个新数组。

- 给定数组 [2, 1, 2, 3, 1, 4, 3]。
- 找出数组中的唯一值并排序。
- 计算每个唯一值出现的次数。

- 某商店 5 天的销售额(万元)和成本(万元)如下:销售额: [20, 25, 22, 30, 28]成本: [15, 18, 16, 22, 20]
- 计算每天的利润(销售额 - 成本)。
- 计算利润的平均值和标准差。
- 找出利润最高的天数。
