Python中如何解决矩阵相关的问题?
假设现在有这样的一段输入数据:
1 5,6
2 2,3
5 1,4
请问怎样写 Python 代码能建立这样的矩阵:
0, 0, 0, 0, 1, 1
0, 1, 1, 0, 0, 0
0, 0, 0, 0, 0, 0
0, 0, 0, 0, 0, 0
1, 0, 0, 1, 0, 0
也就是输入的每行第一个数字是矩阵的行指标,之后的每个数字是列指标,符合输入的行列的元素置 1。因为输入数据的数据范围不清楚所以不能提前建好固定维数的矩阵再填充... 只能想到笨办法,不知道有没有巧妙点的办法...
Python中如何解决矩阵相关的问题?
二维数组不行吗?
在Python里搞矩阵运算,NumPy是绝对的首选。它提供了完整的矩阵操作,从基础的加减乘除到复杂的线性代数运算都能搞定。
import numpy as np
# 创建矩阵
matrix_a = np.array([[1, 2], [3, 4]])
matrix_b = np.array([[5, 6], [7, 8]])
# 基本运算
print("加法:\n", matrix_a + matrix_b)
print("乘法:\n", np.dot(matrix_a, matrix_b)) # 或者 matrix_a @ matrix_b
# 常用操作
print("转置:\n", matrix_a.T)
print("逆矩阵:\n", np.linalg.inv(matrix_a))
print("行列式:", np.linalg.det(matrix_a))
# 解线性方程组
# 解 Ax = b
A = np.array([[3, 1], [1, 2]])
b = np.array([9, 8])
x = np.linalg.solve(A, b)
print("方程组的解:", x)
# 特征值和特征向量
eigenvalues, eigenvectors = np.linalg.eig(matrix_a)
print("特征值:", eigenvalues)
print("特征向量:\n", eigenvectors)
对于更复杂的矩阵问题,比如稀疏矩阵,可以用SciPy的sparse模块。如果是深度学习相关的张量运算,那就上PyTorch或TensorFlow。
简单说就是:基础矩阵用NumPy,特殊需求找对应库。
转化为稀疏矩阵?然后就用稀疏矩阵或者稀疏转满矩阵
输入数据的数据范围不清楚是什么意思…
是会有数据源源不断加入导致矩阵扩充么
直观上感觉生成的矩阵大小只能死算,
行数应该是 max(输入数据的第一列值),列数是 max(第二列中的值)
感觉是问稀疏矩阵问题,试一下 scipy.sparse
[[0, 0, 1], [0, 1, 0]] 这样的列表吗?那如果我现在想把第 1000 行第 1 列置 1 呢?只能先 append 990+ 次 [0, 0, 0]??还有如果是 1000 行 4 列怎么把所有行向量改成四维呢?
谢谢,我去了解下。
对,就是矩阵会扩充的意思。我先试试你说的。
稀疏矩阵不会
但这道题我会把第一个矩阵转为一维,一行就是一个整数,用二进制移位以及二进制补零计算
然后把最终的一维数列,转为二进制显示,并拆分为矩阵
存成稀疏矩阵,后续计算也不用展开,python 可以直接作稀疏矩阵运算
输入的不属于流式数据而是更偏向用户输入 /读取文件类型吧,用[(row,col),…]存储好每一个输入后,得到最大的 row 和 column 数,再用 sparse 得到稀疏矩阵
简单啊,numpy,先建立二维 zeros nparray,在把那些变为一。二行搞定。
scipy 的稀疏矩阵,通过输入数据建立 row,column,value 三个列表就好了。如果检测到有新输入数据就再 append ?
最后咋解决的记得说一哈
<blockquote class=“imgur-embed-pub” lang=“en” data-id=“Vc4S8qX”><a href="//imgur.com/Vc4S8qX"></a></blockquote><script async src="//s.imgur.com/min/embed.js" charset=“utf-8”></script>
不会发图…算了, 贴 Gist 了
问题是为什么一定要建立一个矩阵,如果矩阵稀疏,直接用你输入数据的方式来存不就好了,搜索起来也足够快
用 scipy spares matrix 然后 hard code。最直接的方法了吧。
#7 我用楼上的稀疏矩阵解决了。不过看到你这个想法确实惊到,我就想不出位运算的方法,学习了,谢谢
#8
#9
#10
#11
#14
#17
用 SciPy 的稀疏矩阵解决了,感谢各位帮助!🙏
#16
因为要对矩阵进行运算的,直接存不方便运算,还是谢谢:)
还有就是因为数据范围太大,NumPy 的矩阵处理不来,只能用稀疏矩阵…

