2048 字
10 分钟
python篇(1)
基础语法
参考python官方文档学习即可
python官方文档直通车:https://docs.python.org/3.12
Numpy库
用于科学计算的基础库
1. 数组/矩阵创建
import numpy as np
# 一维数组arr_1 = np.array([1, 2, 3])"""[1 2 3]"""
# 2x3矩阵arr_2 = np.array([[1, 2, 3], [4, 5, 6]])"""[[1 2 3] [4 5 6]]"""
# 全0矩阵arr_3 = np.zeros((3, 3), dtype=int)"""[[0 0 0] [0 0 0] [0 0 0]]"""
# 全1矩阵arr_4 = np.ones((2, 2), dtype=int)"""[[1 1] [1 1]]"""
# 创建全指定值的矩阵arr_5 = np.full((2, 2), 10, dtype=int)"""[[10 10] [10 10]]"""
# 创建等差数列 (start, stop, step), stop不可取arr_6 = np.arange(0,10,2)"""[0 2 4 6 8]"""
# 创建等间隔数列 (start, stop, num), 包含stoparr_7 = np.linspace(0,1,5)print(arr_7)"""[0. 0.25 0.5 0.75 1. ]"""dtype就是指定数据类型的,只要有可能为浮点数,就会生成默认dtype=float的矩阵,需要自己指定类型
2. 获得数组属性
import numpy as np"""[[ 1. 2. 3. 4.] [ 5. 6. 7. 8.] [ 9. 10. 11. 12.]]"""arr = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]], dtype=float)print(arr)
# 维度 2print(arr.ndim)
# 形状 (3, 4), 表示3行4列, 每个参数代表每一维的大小print(arr.shape)
# 总数 行 × 列 值 12print(arr.size)
# 数据类型 float64print(arr.dtype)3. 数组切片/索引
一维数组索引
和普通python的列表索引切片没区别
import numpy as np
"""[1 2 3 4 5]"""arr = np.array([1, 2, 3, 4, 5])
print(arr[0])"""1"""
print(arr[-1])"""5"""
print(arr[1:4])"""[2 3 4]"""二维/多维数组索引
import numpy as np
"""[[1 2 3] [4 5 6] [7 8 9]]"""arr = np.array([[1,2,3], [4,5,6], [7,8,9]])
# 获取某一个元素print(arr[2,2])"""9"""
# 获取某一行print(arr[1])"""[4 5 6]"""
# 获取某一列print(arr[:,1])"""[2 5 8]"""
# 获取某一个子矩阵,同样可以用来取某几个数据print(arr[0:2,0:2])"""[[1 2] [4 5]]"""4. 数组计算
逐元素计算
import numpy as np
arr_1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])"""[[1 2 3] [4 5 6] [7 8 9]]"""arr_2 = np.full((3, 3), 2, dtype=int)"""[[2 2 2] [2 2 2] [2 2 2]]"""
# 加法add_result = arr_1 + arr_2print(add_result)"""[[ 3 4 5] [ 6 7 8] [ 9 10 11]]"""
# 减法sub_result = arr_1 - arr_2print(sub_result)"""[[ -1 0 1] [ 2 3 4] [ 5 6 7]]"""
# 乘法mul_result = arr_1 * arr_2print(mul_result)"""[[ 2 4 6] [ 8 10 12] [14 16 18]]"""
# 除法div_result = arr_1 / arr_2print(div_result)"""[[0.5 1. 1.5] [2. 2.5 3. ] [3.5 4. 4.5]]"""
# 单矩阵和参数计算new_arr_1 = arr_1 + 1print(new_arr_1)"""[[ 2 3 4] [ 5 6 7] [ 8 9 10]]"""new_arr_2 = arr_1 * 3print(new_arr_2)"""[[ 3 6 9] [12 15 18] [21 24 27]]"""矩阵乘法
import numpy as np
arr_1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])"""[[1 2 3] [4 5 6] [7 8 9]]"""
arr_2 = np.full((3, 2), 2, dtype=int)"""[[2 2] [2 2] [2 2]]"""
# 矩阵相乘,前行乘后列mul_result2 = np.dot(arr_1 , arr_2)print(mul_result2)"""[[12 12] [30 30] [48 48]]"""5. 统计函数
import numpy as np
arr = np.array([[1, 2, 3, 4, 5], [5, 4, 3, 2, 1], [6, 7, 8, 9, 10], [10, 9, 8, 7, 6]])"""[[ 1 2 3 4 5] [ 5 4 3 2 1] [ 6 7 8 9 10] [10 9 8 7 6]]"""
sum_arr = np.sum(arr)"""110 对矩阵所有元素求和"""
mean_arr = np.mean(arr)"""5.5 对矩阵所有元素求平均值"""mean_arr2 = np.mean(arr[2, :])"""8.0 对矩阵第三行元素求平均值"""
max_arr = np.max(arr)"""10 矩阵中最大值"""
min_arr = np.min(arr)"""1 矩阵中最小值"""
std_arr = np.std(arr)"""2.8722813232690143 矩阵中所有元素的标准差"""
var_arr = np.var(arr)print(var_arr)"""8.25 矩阵中所有元素的方差"""6. 数组变形拼接
import numpy as np
# 拆分, 同样可以用来行向量转为列向量(1, -1) -> (-1, 1)arr_1 = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])reshape_arr = arr_1.reshape(2, 5)"""[[ 1 2 3 4 5] [ 6 7 8 9 10]]"""
# 拼接arr_2 = np.array([[1, 2, 3], [4, 5, 6]])arr_3 = np.array([[7, 8, 9], [10, 11, 12]])concat_arr = np.concatenate((arr_2, arr_3), axis=1)"""axis=0 按行拼接(上下), 等价于 np.vstack((arr_2, arr_3))[[ 1 2 3] [ 4 5 6] [ 7 8 9] [10 11 12]]
axis=1 按列拼接(左右),等价于 np.hstack((arr_2, arr_3))[[ 1 2 3 7 8 9] [ 4 5 6 10 11 12]]"""7. 过滤元素
import numpy as np
arr = np.array([1,2,3,4,5,6,7,8])arr1 = arr > 3 # 生成布尔数组"""[False False False True True True True True]"""arr2 = arr[arr1] # 过滤小于等于3的元素"""[4 5 6 7 8]"""8. 矩阵转置&逆矩阵
检查矩阵是否可逆
求逆矩阵的常规计算方法
我们知道逆矩阵和原矩阵的关系是
据此有基础的计算2x2矩阵和3x3矩阵计算过程
2x2矩阵:
3x3矩阵:
- step1 计算行列式
- step2 求代数余子式矩阵
- step3 转置代数余子式矩阵➡️伴随矩阵:
- step4 除以行列式得到逆矩阵
import numpy as np
arr = np.array([[1,2,3], [4,5,6], [7,21,10]])
arr_t = arr.T
# 检查矩阵是否可逆check = np.linalg.det(arr)if check != 0: arr_inv = np.linalg.inv(arr) print(arr_inv) """ [[-1.01333333 0.57333333 -0.04 ] [ 0.02666667 -0.14666667 0.08 ] [ 0.65333333 -0.09333333 -0.04 ]] """
# 验证逆矩阵和矩阵相乘是否等于单位矩阵 result = np.dot(arr_inv, arr) print(result) """ [[ 1.00000000e+00 2.15105711e-16 6.52256027e-16] [-1.52655666e-16 1.00000000e+00 -1.38777878e-16] [ 2.08166817e-17 6.24500451e-17 1.00000000e+00]] """Pandas库
用于数据处理和分析的强大库,它提供了高效且灵活的数据结构
Pandas 支持多种文件格式的读写操作,如 CSV、Excel、SQL 数据库等,具体操作时再去搜索即可,这里不展开。
Series数组 - 一维带标签数组
import pandas as pd# 从列表创建Series数组 不指定标签 标签默认为角标s1 = pd.Series([1,True,3.14,"Hello"])print(s1)
# 指定标签s2 = pd.Series([1,True,3.14,"Hello"], index=['a','b','c','d'])print(s2)
# 从字典创建Series数组dic = {'a':10, 'b':20, 'c':30, 'd':40}s3 = pd.Series(dic)print(s3)
"""0 11 True2 3.143 Hellodtype: objecta 1b Truec 3.14d Hellodtype: objecta 10b 20c 30d 40dtype: int64"""DataFrame - 二维表格型数据结构
import pandas as pd
# 从字典创建DataFramedic = { 'name': ['Alice', 'Bob', 'Charlie', 'David'], 'age': [24, 27, 22, 32], 'city': ['New York', 'Los Angeles', 'Chicago', 'Houston']}df1 = pd.DataFrame(dic)print(df1)""" name age city1 Alice 24 New York2 Bob 27 Los Angeles3 Charlie 22 Chicago4 David 32 Houston"""
# 从列表创建DataFramelst = [['Alice', 24, 'New York'], ['Bob', 27, 'Los Angeles'], ['Charlie', 22, 'Chicago'], ['David', 32, 'Houston']]df2 = pd.DataFrame(lst, columns=['name', 'age', 'city'])print(df2)""" name age city0 Alice 24 New York1 Bob 27 Los Angeles2 Charlie 22 Chicago3 David 32 Houston"""同样也可以加index来指定标签,默认是从0开始的数字标签
数据合并与连接
pd.merge() 可以根据一个或多个键将不同 DataFrame 的行连接起来
- 内连接(默认):仅返回两个 DataFrame 中键匹配的行。
- 左连接:返回左 DataFrame 的所有行,以及右 DataFrame 中匹配的行,若右表无匹配则用 NaN 填充。
- 右连接:返回右 DataFrame 的所有行,以及左 DataFrame 中匹配的行,若左表无匹配则用 NaN 填充。
- 外连接:返回两个 DataFrame 中所有行,无匹配的位置用 NaN 填充。
import pandas as pd
df1 = pd.DataFrame( { 'key':['A','B','C','D'], 'value':[1,2,3,4] })df2 = pd.DataFrame({ 'key':['B', 'D', 'E', 'F'], 'value':[4,6,7,8]})
# 内链接 按指定的列来取交集, 默认方式print(pd.merge(df1, df2, on='key', how='inner'))""" key value_x value_y0 B 2 41 D 4 6"""# 左链接 左边与交集的并集print(pd.merge(df1, df2, on='key', how="left"))""" key value_x value_y0 A 1 NaN1 B 2 4.02 C 3 NaN3 D 4 6.0"""# 右链接 右边与交集的并集print(pd.merge(df1, df2, on="key", how='right'))""" key value_x value_y0 B 2.0 41 D 4.0 62 E NaN 73 F NaN 8
"""# 外链接 并集print(pd.merge(df1, df2, on="key", how='outer'))""" key value_x value_y0 A 1.0 NaN1 B 2.0 4.02 C 3.0 NaN3 D 4.0 6.04 E NaN 7.05 F NaN 8.0"""部分信息可能已经过时