csv转为矩阵 python_【Math】Python线性代数

这篇博客主要介绍了如何使用Python中的numpy库将CSV数据转换为矩阵,并探讨了在numpy、scipy和sympy库中的线性代数操作。此外,还提到了利用networkx库进行图论的相关应用。
摘要由CSDN通过智能技术生成

a6e82737dc5b066bcb93857ba8cb6be8.png

目录

  1. numpy
  2. scipy
  3. sympy
  4. 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')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值