以下列出自己常用的一些Python软件包,不定期更新。
0. Python内置语法
a = [1, 2] # 数组
print(a)
print(len(a)) # 数组长度
a.append(3) # 增加元素
print(a)
b = range(5) # 数列(从0开始)
print(b)
for i0 in b:
print(i0)
运行结果:
[1, 2]
2
[1, 2, 3]
range(0, 5)
0
1
2
3
4
1. numpy
numpy官网:https://numpy.org/。参考博文:Python和Numpy库的常用语句。
例子:
import numpy as np
print(np.zeros((2, 3)), '\n') # 零矩阵
print(np.identity(3), '\n') # 单位矩阵
print(np.diag([1, 3, 5]), '\n') # 对角矩阵
matrix1 = np.array([[3, 5+1j], [2, 7]]) # numpy矩阵
print(matrix1, '\n')
print(matrix1.shape, '\n') # 矩阵的维度
print(matrix1.transpose(), '\n') # 矩阵转置
print(matrix1.conj(), '\n') # 矩阵所有元素共轭
print(np.conj(matrix1), '\n') # 矩阵所有元素共轭(同上)
print(np.arange(1, 5, 1), '\n') # 数列(左闭右开)
print(np.linspace(-2, 2, 5), '\n') # 数列(左闭右闭)
print(np.random.uniform(-2, 2), '\n') # 随机数
print(np.random.randint(0, 2), '\n') # 随机整数(左闭右开)
print(np.sort([1, 7, 0, 3]), '\n') # 排列
print(np.argsort([1, 7, 0, 3]), '\n') # 排列索引
print(np.linalg.det(matrix1), '\n') # 行列式
matrix2 = np.linalg.inv(matrix1) # 求逆
print(matrix2, '\n')
print(np.matmul(matrix1, matrix2), '\n') # 矩阵乘积
print(np.dot(matrix1, matrix2), '\n') # 矩阵乘积(同上)
eigenvalue, eigenvector = np.linalg.eig(matrix1) # 求本征值,本征向量
print(eigenvalue, '\n')
print(eigenvector, '\n')
matrix3 = np.append(matrix1, matrix2, axis=0) # 增加数组元素或者矩阵的行
print(matrix3)
运行结果:
[[0. 0. 0.]
[0. 0. 0.]]
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
[[1 0 0]
[0 3 0]
[0 0 5]]
[[3.+0.j 5.+1.j]
[2.+0.j 7.+0.j]]
(2, 2)
[[3.+0.j 2.+0.j]
[5.+1.j 7.+0.j]]
[[3.-0.j 5.-1.j]
[2.-0.j 7.-0.j]]
[[3.-0.j 5.-1.j]
[2.-0.j 7.-0.j]]
[1 2 3 4]
[-2. -1. 0. 1. 2.]
-0.9591084896701201
1
[0 1 3 7]
[2 0 3 1]
(11.000000000000002-2j)
[[ 0.616+0.112j -0.424-0.168j]
[-0.176-0.032j 0.264+0.048j]]
[[ 1.00000000e+00+0.00000000e+00j 4.85722573e-17+0.00000000e+00j]
[-1.66533454e-16+2.08166817e-17j 1.00000000e+00-6.93889390e-18j]]
[[ 1.00000000e+00+0.00000000e+00j 4.85722573e-17+0.00000000e+00j]
[-1.66533454e-16+2.08166817e-17j 1.00000000e+00-6.93889390e-18j]]
[1.2488578-0.26658547j 8.7511422+0.26658547j]
[[ 0.9446263 +0.j 0.65546019+0.09978411j]
[-0.3277961 +0.01519449j 0.74860876+0.j ]]
[[ 3. +0.j 5. +1.j ]
[ 2. +0.j 7. +0.j ]
[ 0.616+0.112j -0.424-0.168j]
[-0.176-0.032j 0.264+0.048j]]
2. math
math官网:https://docs.python.org/3/library/math.html。math中的一些函数在numpy中可以直接调用。
例子:
import math
print(math.pi)
print(math.e)
print(math.exp(1))
print(math.cos(math.pi))
print(math.sqrt(2), '\n')
import numpy as np
print(np.pi)
print(np.e)
print(np.exp(1))
print(np.cos(np.pi))
print(np.sqrt(2))
运行结果:
3.141592653589793
2.718281828459045
2.718281828459045
-1.0
1.4142135623730951
3.141592653589793
2.718281828459045
2.718281828459045
-1.0
1.4142135623730951
3. cmath
cmath官网:https://docs.python.org/3/library/cmath.html。因为numpy和math中指数等无法处理复数的情况,所以要用cmath。
例子:
import cmath
print(cmath.exp(1j*cmath.pi))
运行结果:
(-1+1.2246467991473532e-16j)
4. copy
copy官网:https://docs.python.org/3/library/copy.html。如果直接用等于号,两个变量会指向相同的id,改变一个值,另外一个值可能会发生改变,容易出错,所以要用上这个copy。
例子:
import copy
import numpy as np
array_1 = [1, 2, 3]
array_2 = array_1
array_1[0] = 100
print('array_1=', array_1)
print('array_2=', array_2, '\n')
array_1 = np.array([1, 2, 3])
array_2 = array_1
array_1[0] = 100
print('array_1=', array_1)
print('array_2=', array_2, '\n')
array_1 = [1, 2, 3]
array_2 = copy.deepcopy(array_1)
array_1[0] = 100
print('array_1=', array_1)
print('array_2=', array_2, '\n')
array_1 = np.array([1, 2, 3])
array_2 = copy.deepcopy(array_1)
array_1[0] = 100
print('array_1=', array_1)
print('array_2=', array_2)
运行结果:
array_1= [100, 2, 3]
array_2= [100, 2, 3]
array_1= [100 2 3]
array_2= [100 2 3]
array_1= [100, 2, 3]
array_2= [1, 2, 3]
array_1= [100 2 3]
array_2= [1 2 3]
5. matplotlib
matplotlib官网:https://matplotlib.org/。参考博文:Python中Matplotlib库的常用语句、使用Matplotlib画图。
例子:
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(range(10), range(10))
ax.set_title('Example', fontsize=20, fontfamily='Times New Roman')
ax.set_xlabel('x', fontsize=20, fontfamily='Times New Roman')
ax.set_ylabel('y', fontsize=20, fontfamily='Times New Roman')
plt.show()
运行结果:
6. functools
functools官网:https://docs.python.org/3/library/functools.html。“偏函数”的使用。
例子:
import functools
def func(x, y, z):
return x-y+z
partial_func = functools.partial(func, x=5, z=0)
print(partial_func(y=2))
运行结果:
3
7. time
time官网:https://docs.python.org/3/library/time.html。
例子:
import time
start_time = time.time()
time.sleep(5)
end_time = time.time()
print(end_time-start_time)
运行结果:
5.002896547317505
8. os
os官网:https://docs.python.org/3/library/os.html。
例子:
import os
os.getcwd() # 获取路径
if os.path.exists('new_dir') == False: # 判断路径是否存在
os.makedirs('new_dir') # 新建文件夹
os.chdir('new_dir') # 切换到该文件夹
print(os.walk('/')) # 游走目录
9. pickle
通过 pickle,你可以将几乎任何 Python 对象(如列表、字典、函数、类实例等)转换为字节流文件,并在需要时恢复为原始对象。
例子:
import pickle
data = [1, 2, 3]
# 保存为文件
with open('a.txt', 'wb') as f:
pickle.dump(data, f)
with open('a.txt', 'rb') as f:
data_load_from_file = pickle.load(f)
print(data_load_from_file)
print()
# 把对象转换成字节流
serialized_data = pickle.dumps(data) # 转换成字节流
print(type(serialized_data))
print(serialized_data)
print()
loaded_data = pickle.loads(serialized_data) # 转换成原类型
print(type(loaded_data))
print(loaded_data)
运行结果:
[1, 2, 3]
<class 'bytes'>
b'\x80\x04\x95\x0b\x00\x00\x00\x00\x00\x00\x00]\x94(K\x01K\x02K\x03e.'
<class 'list'>
[1, 2, 3]
10. json
JSON(JavaScript Object Notation)可以简单地视为字典(或映射)的字符串表示形式。JSON是一种轻量级的数据交换格式,通常用于在网络之间传输数据。它采用键值对的形式,类似于字典或映射的结构。以下是相互转换的例子。
import json
# 定义一个字典对象
data = {
"name": "张三",
"age": 30,
"city": "北京"
}
print(type(data))
print(data.items())
for key, value in data.items():
print(f'{key}: {value}')
print()
# 将字典对象转换为JSON格式
json_data = json.dumps(data)
print(type(json_data))
print("JSON格式数据:", json_data)
print()
# 将JSON格式数据转换回字典对象
dict_data = json.loads(json_data)
print(type(dict_data))
print("字典对象:", dict_data)
运行结果:
<class 'dict'>
dict_items([('name', '张三'), ('age', 30), ('city', '北京')])
name: 张三
age: 30
city: 北京
<class 'str'>
JSON格式数据: {"name": "\u5f20\u4e09", "age": 30, "city": "\u5317\u4eac"}
<class 'dict'>
字典对象: {'name': '张三', 'age': 30, 'city': '北京'}
11. re
正则表达式是一种强大的字符串匹配工具,它允许您以一种灵活的方式搜索和操作字符串。
例子:
import re
# 正则表达式:匹配任意字符(.);零次或多次(*);尽可能少地匹配(?)
# re.match 指匹配起始位置的模式,如果起始位置不匹配的话,返回 None
string = 'this_is_a_test_abc_123'
result = re.match(pattern='ab(.*?)23', string=string)
print(result)
print()
result = re.match(pattern='this(.*?)abc', string=string)
print(result.group(0))
print(result.group(1))
print()
# re.search 扫描整个字符串并返回第一个成功的匹配。
string = 'this_is_a_test_abc_123'
result = re.search(pattern='ab(.*?)23', string=string)
print(result.group(0))
print(result.group(1))
print()
result = re.search(pattern='this(.*?)abc', string=string)
print(result.group(0))
print(result.group(1))
运行结果:
None
this_is_a_test_abc
_is_a_test_
abc_123
c_1
this_is_a_test_abc
_is_a_test_
12. tqdm
tqdm是一个Python库,它为循环迭代提供了一个简单而有效的进度条显示功能。
例子:
from tqdm import tqdm
import time
import numpy as np
for i in tqdm(np.arange(1, 10)):
time.sleep(0.1)
print('', i)
运行结果:
0%| | 0/9 [00:00<?, ?it/s] 1
11%|██████▍ | 1/9 [00:00<00:00, 9.37it/s] 2
22%|████████████▉ | 2/9 [00:00<00:00, 9.25it/s] 3
33%|███████████████████▎ | 3/9 [00:00<00:00, 9.20it/s] 4
44%|█████████████████████████▊ | 4/9 [00:00<00:00, 9.16it/s] 5
56%|████████████████████████████████▏ | 5/9 [00:00<00:00, 9.18it/s] 6
67%|██████████████████████████████████████▋ | 6/9 [00:00<00:00, 9.18it/s] 7
78%|█████████████████████████████████████████████ | 7/9 [00:00<00:00, 9.19it/s] 8
89%|███████████████████████████████████████████████████▌ | 8/9 [00:00<00:00, 9.16it/s] 9
100%|██████████████████████████████████████████████████████████| 9/9 [00:00<00:00, 9.17it/s]
13. multiprocessing
官网:https://docs.python.org/3/library/multiprocessing.html。一个并行计算的软件包,参考博文:在Python中使用multiprocessing实现多任务并行。
例子:
from multiprocessing import Process
import time
def f(name):
for i in range(5):
time.sleep(1)
print('Hello', name, i)
if __name__ == '__main__':
start_time = time.time()
f('A')
f('B')
end_time = time.time()
print(end_time - start_time, '\n')
start_time = time.time()
p1 = Process(target=f, args=('A',))
p2 = Process(target=f, args=('B',))
p1.start()
p2.start()
p1.join()
p2.join()
end_time = time.time()
print(end_time - start_time)
运行结果:
Hello A 0
Hello A 1
Hello A 2
Hello A 3
Hello A 4
Hello B 0
Hello B 1
Hello B 2
Hello B 3
Hello B 4
10.094563722610474
Hello A 0
Hello B 0
Hello B 1
Hello A 1
Hello B 2
Hello A 2
Hello A 3
Hello B 3
Hello A 4
Hello B 4
5.1369547843933105
14. threading
Threading多线程并行。
例子:
import threading
import time
def print_numbers(x):
for i in range(5):
time.sleep(1)
print(f"Thread {x}: {i}")
# 串行测试
start_time = time.time()
print_numbers('A')
print_numbers('B')
end_time = time.time()
print(end_time - start_time, '\n')
# 创建两个线程
thread1 = threading.Thread(target=print_numbers, args=('A'))
thread2 = threading.Thread(target=print_numbers, args=('B'))
start_time = time.time()
# 启动线程
thread1.start()
thread2.start()
# 等待两个线程完成
thread1.join()
thread2.join()
end_time = time.time()
print(end_time - start_time)
运行结果:
Thread A: 0
Thread A: 1
Thread A: 2
Thread A: 3
Thread A: 4
Thread B: 0
Thread B: 1
Thread B: 2
Thread B: 3
Thread B: 4
10.111509561538696
Thread A: 0
Thread B: 0
Thread A: 1
Thread B: 1
Thread B: 2
Thread A: 2
Thread B: 3
Thread A: 3
Thread A: 4
Thread B: 4
5.056422710418701
【说明:本站主要是个人的一些笔记和代码分享,内容可能会不定期修改。为了使全网显示的始终是最新版本,这里的文章未经同意请勿转载。引用请注明出处:https://www.guanjihuan.com】