python常用代码
- 作者: chaihahaha
- 时间:
- 分类: 计算机技术笔记
- 评论
素性测试from sympy.ntheory.primetest import isprime将十六进制密钥转成整型数def hex_str2int(s):
prime="".join(s.replace(" ","").replace("\n","").split(":&q...
展开阅读
- 素性测试
from sympy.ntheory.primetest import isprime
- 将十六进制密钥转成整型数
def hex_str2int(s):
prime="".join(s.replace(" ","").replace("\n","").split(":"))
return int(prime, 16)
- 计算不定积分
# 依赖 matchpy, sympy.__version__>='1.5'
from sympy import symbols
from sympy import pprint
from sympy.integrals.rubi.rubimain import LoadRubiReplacer
from sympy.integrals.rubi.rubimain import rubi_integrate
x, y, z, b, d, m, n = symbols('x y z b d m n', real=True, imaginary=False)
loader = LoadRubiReplacer()
loader.from_pickle("rubi.pickle")
pprint(rubi_integrate((b*x)**m*(d*x + 2)**n, x))
loader.to_pickle("rubi.pickle")
- 得到两个向量的笛卡尔积,如 $[1,2,3,4]\otimes[1,2,3]=\\ [[1,1],[1,2],[1,3],\\ [2,1],[2,2],[2,3],\\ [3,1],[3,2],[3,3],\\ [4,1],[4,2],[4,3]]$
import numpy as np
def cardinal_mul(x,y):
x = np.array(x).reshape(-1)
y = np.array(y).reshape(-1)
return np.array(np.meshgrid(x,y)).T.reshape(-1,2)
- 使用base64将大整数编码成ascii字符串,以及从ascii字符串解码得到大整数
import base64
def int2ascii(n):
return base64.b64encode(n.to_bytes(n.bit_length()//8+1,byteorder='big')).decode('ascii')
def ascii2int(s):
return int.from_bytes(base64.b64decode(s.encode('ascii')),byteorder='big')
- 过滤掉字符串中所有的换行符
def filter_linebreak(s):
return s.translate(str.maketrans({'\n':None}))
- 多项式核和RBF核,使用reshape,广播和np.sum实现非矩阵积的内积
def rbf(sigma=1):
def rbf_kernel(x1,x2,sigma):
m=len(x1)
n=len(x2)
d=x1.shape[1]
x1 = x1.reshape((m,1,d))
x2 = x2.reshape((1,n,d))
result = np.sum((x1-x2)**2,2)
result = np.exp(-result/(2*sigma**2))
return result
return lambda x1,x2: rbf_kernel(x1,x2,sigma)
def poly(n=3):
return lambda x1,x2: (x1 @ x2.T)**n
- 初始化m行n列的稀疏矩阵,格式互转
import sparse
s=sparse.zeros((m,n))
nparr = s.todense()
s=sparse.COO(nparr)
- 打印变量的大小,以GB为单位
import sys
def getGB(a):
print(sys.getsizeof(a)/1e9,"GB")
return
- dict
a = dict() # 空字典
b = {1:1, 2:2}
c = {3:3}
d = {**b, **c} # 字典的并集
d.pop(k) # 删除key为k的项
- frozenset
a = frozenset([1,2])
b = frozenset([1,2,3])
a & b # 交
a | b # 并
a < b # a 是 b 的真子集
a <= b # a 是 b 的子集
a ^ b # 对称差
a - b # 差集
i in a # i 属于 a
a=frozenset([1,2,3])
b=frozenset([2,5])
c=frozenset([a,b]) # 嵌套的集合 frozenset{frozenset{}}
- networkx
g[n1][n2]['label'] # 获取边 n1-n2 的标签
g.nodes[n]['label'] # 获取节点 n 的标签
g.add_node(n, label=newlabel) # 更改节点 n 的标签
g.add_edge(e, label=newlabel) # 更改边 e 的标签
g=nx.Graph([e1,e2,e3]) # 从边新建图
g.edges(nodes) # 所有与 nodes 邻接的边
g.subgraph(nodes) # 从 nodes 诱导的子图
g.edge_subgraph(edges) # 从 edges 诱导的子图
frozenset(a.edge_subgraph(a.edges([1,2]))) # 节点1和2的邻接子图
nx.draw(G) # 画图
pos = nx.spring_layout(base) # 设定位置
nx.draw_networkx_nodes(base,pos=pos,node_color='#000000') # 节点画成黑色
nx.draw_networkx_edges(base,pos=pos,edge_color='#000000') # 边画成黑色
- 子图同构和单态射
graph=nx.Graph([[0,1],[1,2],[1,3],[3,4],[2,4],[4,5],[1,4]])
subgraph=nx.Graph([[0,1],[0,2]])
gm = isomorphism.GraphMatcher(graph,subgraph)
gm.subgraph_isomorphisms_iter() # 从 graph 的一个诱导子图到 subgraph 的 embedding 字典迭代器,其中subgraph是graph的诱导子图,否则迭代器为空
gm.subgraph_monomorphisms_iter() # 和iso的区别是它的条件更宽松
# 测试mono和iso,mono有
len(list(gm.subgraph_monomorphisms_iter())) # == 28
len(list(gm.subgraph_isomorphisms_iter())) # == 16
- os
import os
filenames = list(os.listdir("dir"))
os.rename(filename1,filename2)
- matplotlib
fig,ax = plt.subplots()
ax.errorbar(x, y, err, ecolor='r', fmt='--o',capsize =5)
ax.set_title('title')
ax.set_xlabel('x')
ax.set_ylabel('x')
fig.savefig(filename)
fig.show()
fig.clf()
- 计算均值和置信区间[m-h,m+h]
import matplotlib.pyplot as plt
import scipy.stats
import numpy as np
def mean_confidence_interval(data, confidence=0.95):
a = 1.0 * np.array(data)
n = len(a)
m, se = np.mean(a), scipy.stats.sem(a)
h = se * scipy.stats.t.ppf((1 + confidence) / 2., n-1)
return m, h
- 一次跳出两个循环
for i in range(len(s)):
for j in range(i+1, len(s)):
if s[i] == s[j]:
answer = (i, j)
break
else:
continue
break
- 输出二维矩阵每行元素的所有可能组合,例:[[1,2],[3,4,5],[6,7],[8]] -> [1,3,6,8], [1,3,7,8] ...
def perm(a,i,r):
if i < len(a):
for j in range(len(a[i])):
r[i]=a[i][j]
yield from perm(a,i+1,r) # for i in perm(a,i+1,r): yield i
else:
yield r
a=[[1,2],[3,4,5],[6,7],[8]]
for i in perm(a, 0, [0,0,0,0]):
print(i)
- 将一个集合通过一个字典映射到另一个集合,如字典
f = {1:3,2:4}
将集合A={1,2}
映射到B={3,4}
B=set(map(lambda x:dic[x],A))
- 复数
a=np.zeros((2,3), dtype='complex_')
a[1,2] = 1j