平方差: 与平均值偏差平方的平均值
标准差: 方差的平方根
正态分布:
正态分布(Normal Distribution),也叫高斯分布,是统计学中最常见、最重要的连续概率分布之一。它的核心特点可以用一句话概括:大多数数据集中在平均值附近,越远离平均值的数据越少,整体形状像一口"钟"------所以也叫"钟形曲线"。
python
# 导包
import numpy as np
import pandas as pd
1.Numpy的属性介绍
1.1 创建ndarray对象
python
# numpy -> 和数学操作相关的库, numpy的数组是多维的, 并且是固定类型的, numpy的数组是ndarray, 主要用于: 矩阵运算
# 1. 创建numpy的 ndarray对象.
arr1 = np.arange(15).reshape(3, 5)
print(arr1)
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]]
1.2 演示numpy的常用属性
python
print(f'numpy的轴: {arr1.ndim}') # 2
print(f'numpy的维度: {arr1.shape}') # (3, 5), 3行5列
print(f'numpy的元素类型: {arr1.dtype}') # int32
print(f'numpy的元素个数: {arr1.size}') # 15
print(f'numpy的元素占用字节数: {arr1.itemsize}') # 4 = 32/8
print(f'numpy的元素类型: {type(arr1)}') # <class 'numpy.ndarray'>
2.创建Numpy的ndarray对象
2.1 array()函数, 把Python列表 -> ndarray对象
python
# 1. 创建python列表对象.
my_list = [11, 22, 33, 44, 55]
print(type(my_list)) # <class 'list'>
# 2. 把python列表 -> ndarray对象.
arr2 = np.array(my_list)
print(arr2) # [11 22 33 44 55]
print(type(arr2)) # <class 'numpy.ndarray'>
2.2 arange()函数, 创建ndarray对象
python
# arange(起始, 结束, 步长, dtype=类型), 类似于 Pythong中的range()函数.
# 1. 创建ndarray对象.
arr3 = np.arange(0, 10, 2, dtype=np.int64)
# 2. 打印ndarray对象.
print(arr3)
print(type(arr3))
print(f'元素的类型: {arr3.dtype}')
[0 2 4 6 8]
<class 'numpy.ndarray'>
元素的类型: int64
2.3 随机数生成 ndarray对象
python
# 1. random.rand() 生成 0.0 ~ 1.0之间, 包左不包右的 随机小数矩阵.
arr4 = np.random.rand(3, 5) # 3行5列
print(arr4)
print(type(arr4))
[[0.58002155 0.8210968 0.3555357 0.83037213 0.55565257]
[0.90465971 0.27219947 0.4622153 0.99728997 0.48724815]
[0.67312207 0.07415796 0.72759944 0.32860675 0.39319645]]
<class 'numpy.ndarray'>
python
# 2. random.randint(起始值, 结束值, size=(行,列)) 生成指定范围, 包左不包右的 随机整数矩阵.
arr5 = np.random.randint(3, 9, size=(2, 6)) # 3 ~ 9之间, 包左不包右. 2行6列
print(arr5)
print(type(arr5))
[[6 8 5 6 4 4]
[7 3 3 8 3 5]]
<class 'numpy.ndarray'>
python
# 3. random.uniform(起始值, 结束值, size=(行,列)) 生成指定范围, 包左不包右的 随机小数矩阵.
arr6 = np.random.uniform(3, 9, size=(2, 6))
print(arr6)
print(type(arr6))
[[3.03155165 7.31321654 5.36135413 4.5904866 8.87716676 4.41707935]
[4.48983879 3.21564226 8.98505777 4.12811231 8.95322474 5.05137227]]
<class 'numpy.ndarray'>
2.4 numpy的类型转换 astype()
python
# 1. 创建ndarray对象.
arr7 = np.arange(0, 10, 2, dtype=np.int64)
print(arr7)
print(arr7.dtype)
[0 2 4 6 8]
int64
python
# 2. 把上述的 arr7 ndarray对象的元素 从 int64类型 -> float32
arr8 = arr7.astype(np.float32)
print(arr8)
print(arr8.dtype)
[0. 2. 4. 6. 8.]
float32
2.5 创建等比数列
python
# 1. 创建等比数列. 参1: 起始值(充当10的指数), 参2: 结束值(充当10的指数), 参3: 元素个数.
arr9 = np.logspace(0, 3, 4)
# 2. 打印ndarray对象.
print(arr9)
print(arr9.dtype)
[ 1. 10. 100. 1000.]
float64
python
# 3. 创建等比数列. 参1: 起始值(充当2的指数), 参2: 结束值(充当2的指数), 参3: 元素个数, 参4: 修改底数(基数)为 2, 参5: 修改数据类型为 int64.
arr9 = np.logspace(0, 3, 4, base=2, dtype=np.int64)
# 4. 打印ndarray对象.
print(arr9)
print(arr9.dtype)
[1 2 4 8]
int64
2.6 创建等差数列
python
# 1. 创建等差数列. 参1: 起始值, 参2: 结束值, 参3: 元素个数, 参4: 是否包含结束值, 参5: 修改数据类型为 int32.
arr10 = np.linspace(1, 10, 4, endpoint=False, dtype=np.int32)
# 2. 打印ndarray对象.
print(arr10)
print(arr10.dtype)
[1 3 5 7]
int32
3.演示Numpy的常用函数
3.1 基本函数
python
# 1.创建标准的正太分布的序列.
arr1 = np.random.randn(3, 5)
print(arr1)
[[-0.46953414 -0.31343975 0.36591142 -1.4658582 0.09914008]
[ 0.63579989 1.64387641 -0.82781252 -0.54235244 0.09036224]
[ 0.59429969 0.50850006 0.38111194 1.31434605 -0.02857214]]
python
# 2. 测试基本函数.
# print(np.ceil(arr1)) # 天花板数 -> 向上取整, 比它大的, 最小的那个整数.
# print(np.floor(arr1)) # 地板数
# print(np.rint(arr1)) # 四舍五入
# print(np.abs(arr1)) # 绝对值
# print(np.multiply(arr1, arr1)) # 矩阵乘法(行列数一致)
# print(arr1 * arr1) # 效果同上.
# print(np.divide(arr1, arr1)) # 矩阵除法(行列数一致)
print(np.where(arr1 > 0, 1, -1)) # 类似于python中的 三元表达式
[[-1 -1 1 -1 1]
[ 1 1 -1 -1 1]
[ 1 1 1 1 -1]]
3.2 统计函数
python
# 1. 定义ndarray对象(数组对象)
arr1 = np.arange(12).reshape(3, 4)
print(arr1)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
python
# 2. 验证 累加和.
print(np.cumsum(arr1)) # [ 0 1 3 6 10 15 21 28 36 45 55 66]
python
# 3. 验证 求和.
print(np.sum(arr1)) # 66
print(np.sum(arr1, axis=0)) # 0 -> 列
print(np.sum(arr1, axis=1)) # 1 -> 行
66
[12 15 18 21]
[ 6 22 38]
3.3 去重函数
python
# 1. 定义数组.
arr1 = np.array([[1, 2, 1], [2, 3, 5]]) # 2行3列
print(arr1)
[[1 2 1]
[2 3 5]]
python
# 2. 对上述元素去重.
arr2 = np.unique(arr1) # 去重, 返回新副本
print(f'arr1: {arr1}') # [[1 2 1] [2 3 5]]
print(f'arr2: {arr2}') # [1 2 3 5]
3.4 排序函数
python
# 1. 定义数组
arr1 = np.array([11, 33, 22, 66, 55])
print(arr1)
[11 33 22 66 55]
python
# 2. 通过 np.sort()方式排序 -> 返回新副本.
arr2 = np.sort(arr1)
print(f'arr1: {arr1}') # [11 33 22 66 55]
print(f'arr2: {arr2}') # [11 22 33 55 66]
python
# 3. 通过 数组对象.sort() -> 直接修改原数组
print(f'排序前 arr1: {arr1}')
arr1.sort()
print(f'排序后 arr1: {arr1}')
排序前 arr1: [11 33 22 66 55]
排序后 arr1: [11 22 33 55 66]
4. Numpy的矩阵运算
4.1 减法运算
python
# 1. 定义数组.
arr1 = np.array([10, 20, 30, 40])
arr2 = np.arange(4)
# 2. 打印数组.
print(f'arr1: {arr1}')
print(f'arr2: {arr2}')
arr1: [10 20 30 40]
arr2: [0 1 2 3]
python
# 3. 减法运算.
print(arr1 - arr2) # 对应元素做减法运算.
[10 19 28 37]
python
# 4. 加法运算.
print(arr1 + arr2)
[10 21 32 43]
4.2 矩阵乘法
python
# 1. 定义数组.
arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr2 = np.array([[1, 2, 3], [4, 5, 6]])
# 2. 打印数组
print(f'arr1: {arr1}')
print(f'arr2: {arr2}')
arr1: [[1 2 3]
[4 5 6]]
arr2: [[1 2 3]
[4 5 6]]
python
# 3. 矩阵乘法, 行列数一致.
print(arr1 * arr2) # 对应位置(坐标)的元素做乘法运算.
print(np.multiply(arr1, arr2)) # 效果同上
[[ 1 4 9]
[16 25 36]]
[[ 1 4 9]
[16 25 36]]
python
# 4. 矩阵乘法, 行列数不一致.
arr3 = np.array([[1, 2, 3], [4, 5, 6]])
arr4 = np.array([[9, 8], [6, 5], [3, 2]])
# 5. 打印数组.
print(f'arr3: {arr3}')
print(f'arr4: {arr4}')
arr3: [[1 2 3]
[4 5 6]]
arr4: [[9 8]
[6 5]
[3 2]]
python
# 6. 矩阵乘法 -> 行列数不一致.
# print(arr3 * arr4) # 报错, 行列数不一致.
print(arr3 @ arr4) # 语法糖, A: 2行3列, B: 3行2列. A列 = B行即可操作, 结果是: A行B列
print(np.dot(arr3, arr4)) # 效果同上
print(arr3.dot(arr4)) # 效果同上
[[30 24]
[84 69]]
[[30 24]
[84 69]]
[[30 24]
[84 69]]
python
# 7. A列 = B行即可操作, 结果是: A行B列
arr3 = np.array([[1, 2, 3, 4], [4, 5, 6, 7]]) # 2行4列
arr4 = np.array([[9, 8], [6, 5], [3, 2]]) # 3行2列
print(arr3 @ arr4) # 不符合 A列 = B行, 所以无法操作.
ValueError: matmul: Input operand 1 has a mismatch
in its core dimension 0, with gufunc signature
(n?,k),(k,m?)->(n?,m?) (size 3 is different from 4)