目录
- numpy
- scipy
- sympy
- networkx(图)
1.numpy
- 一维数组
1import numpy as np
from numpy import asarray, savetxt, loadtxt, load
# 创建
np.arange(1,10) # arange比range快
np.array([1, 2, 3], dtype=np.int64)
# 取值
x[:5] first five elements
x[5:] elements after index 5
x[4:7] middle sub-array
x[::2] every other element
# 改值
a[1:3] = -1 # a[1]、a[2]变-1,数组切片改值会改在原数组上
- 多维数组
# 创建
np.zeros((4,2)) # 全0数组
np.ones((1,2)) # 全1数组
np.full((2,2), 7) # 全7数组
np.eye(2) # 斜对角1(左上到右下)
# 取值
A[:2, :3] # two rows, three columns
A[:3, ::2] # all rows, every other column
A[:,1] # 取出一列,所有行
A[1,:] # 取出一行,所有列
# 改值
A[pos1,pos2] = val
- 数组运算
# 常见运算
np.add(z,w) # 即z+w
np.subtract(z,w) # 即 z-w
np.multiply(z,w) # 即 z*w
np.divide(z,w) # 即 z/w
np.sqrt(z) # 即 z平方
np.sum(x,axis=0) # 数组求和,axis不写全加和,axis=0列相加 , axis=1行相加
# 点乘
A@B
np.dot(A,B)
# 逆矩阵
np.linalg.inv(A)
# 转置矩阵
B.T
- Reshape
# put the numbers 1 through 9 in a 3×3 grid
grid = A.reshape((3, 3))
# row vector via reshape
A.reshape((1, 3))
# column vector via reshape
A.reshape((3, 1))
# projection 从数组的形状中删除单维度条目,即把shape中为1的维度去掉[[1],[2],[3]]->[1,2,3]
np.squeeze(A)
- 数组拼接
grid = np.array([[1, 2],[4, 5]])
# concatenate along the first axis,default axis=0 means columns[[1,2],[4,5],[1,2],[4,5]]
np.concatenate([grid, grid])
# concatenate along the second axis (zero-indexed),axis=1 means rows[[1,2,1,2],[4,5,4,5]]
np.concatenate([grid, grid], axis=1)
# 垂直合并
np.vstack
# 水平合并(等同于axis=1)
np.hstack
- 数组分割
# 用3和5分割xx
xa, xb, xc = np.split(xx, [3, 5])
# 垂直切割
np.vsplit
# 水平切割
np.hsplit
- 数组转换
np.array('1,2,3,4') tuple转为array
np.array(np.mat('1,2; 3,4')) matrix转为array
np.array(np.mat([[1,2],[3,4]])) matrix转为array
- 其他
# 矩阵复制
B = A.copy()
# 解线性方程组
np.linalg.solve(A, B)
# 压缩提取数据
data = asarray([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]) # 转换
savetxt('data/mysimpledata.csv', data, delimiter=',') # 存储csv
save('data/mysimpledata.npy', data) # 存储npy
savez_compressed('data/mysimpledata.npz', data) # 压缩npz
loadtxt('data/mysimpledata.csv', delimiter=',') # 加载csv
dict_data = load('data2/data.npz') # 加载npz
2.scipy
import scipy as sp
import scipy.linalg as la
import scipy.sparse as spp
import matplotlib.pyplot as plt
# 特征值
(v, r) = la.eig(C, left = False) # v特征值,r特征矩阵
d = sp.diag(v) # 把v变成特征矩阵
# 稀疏单位矩阵
D = spp.eye(行数)
# 随机稀疏矩阵
R = spp.random(100,100,density=0.01)
# 画出稀疏矩阵
plt.spy(R)
3.sympy
from sympy import Matrix
# 矩阵、特征值
A = Matrix([[1, 2, 3], [0, 1, -2], [0, 1, 4]])
A.eigenvals()
A.eigenvects()
4.networkx
import numpy as np
import pandas as pd
from scipy import sparse
import scipy.sparse.linalg
import networkx as nx
import matplotlib.pyplot as plt
# 邻接矩阵
Adj = nx.to_scipy_sparse_matrix(数据, dtype=np.float64)
# 变密美化
pd.DataFrame(Adj.todense())
# 度
degrees = np.ravel(Adj.sum(axis=1))
# 对角矩阵
Deginv = sparse.diags(1 / degrees).tocsr()
# 图
G = nx.Graph()
G.add_edges_from([('A', 'B'), ('A', 'C'), ('D', 'B'), ('E', 'C'), ('E', 'F')])
val_map = {'A': 1.0, 'D': 0.5714285714285714,'H': 0.0}
values = [val_map.get(node, 0.25) for node in G.nodes()]
nx.draw(G, cmap=plt.get_cmap('viridis'), node_color=values, with_labels=True, font_color='white')
plt.show()
# 环图
G = nx.cycle_graph(24)
pos = nx.spring_layout(G, iterations=200)
nx.draw(G, pos, node_color=range(24), node_size=800, cmap=plt.cm.Blues)
plt.show()
# 随机图
g = nx.random_regular_graph(3, 50)
nx.draw_spring(g)
g = nx.erdos_renyi_graph(200, .15)
nx.draw_spring(g)
# ER图
g = nx.watts_strogatz_graph(50, 5, .15)
nx.draw_spring(g)
g = nx.barabasi_albert_graph(30, 5)
nx.draw_spring(g)
# 几何图
G=nx.random_geometric_graph(200, 0.125)
pos=nx.get_node_attributes(G,'pos')