请教一个 Python 矩阵的问题

2017-08-19 15:58:00 +08:00
 hx1997

假设现在有这样的一段输入数据:

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。因为输入数据的数据范围不清楚所以不能提前建好固定维数的矩阵再填充... 只能想到笨办法,不知道有没有巧妙点的办法...

2675 次点击
所在节点    Python
20 条回复
XiaoFaye
2017-08-19 16:00:11 +08:00
二维数组不行吗?
bugcoder
2017-08-19 16:30:46 +08:00
转化为稀疏矩阵?然后就用稀疏矩阵或者稀疏转满矩阵
katsusan
2017-08-19 16:44:06 +08:00
输入数据的数据范围不清楚是什么意思..
是会有数据源源不断加入导致矩阵扩充么

直观上感觉生成的矩阵大小只能死算,
行数应该是 max(输入数据的第一列值),列数是 max(第二列中的值)
lzhCoooder
2017-08-19 16:54:33 +08:00
感觉是问稀疏矩阵问题,试一下 scipy.sparse
hx1997
2017-08-19 16:55:25 +08:00
@XiaoFaye [[0, 0, 1], [0, 1, 0]] 这样的列表吗?那如果我现在想把第 1000 行第 1 列置 1 呢?只能先 append 990+ 次 [0, 0, 0]??还有如果是 1000 行 4 列怎么把所有行向量改成四维呢?
hx1997
2017-08-19 16:57:08 +08:00
@bugcoder
@lzhCoooder
谢谢,我去了解下。

@katsusan
对,就是矩阵会扩充的意思。我先试试你说的。
imn1
2017-08-19 17:34:03 +08:00
稀疏矩阵不会

但这道题我会把第一个矩阵转为一维,一行就是一个整数,用二进制移位以及二进制补零计算
然后把最终的一维数列,转为二进制显示,并拆分为矩阵
blankme
2017-08-19 18:00:19 +08:00
存成稀疏矩阵,后续计算也不用展开,python 可以直接作稀疏矩阵运算
Allianzcortex
2017-08-19 19:05:01 +08:00
输入的不属于流式数据而是更偏向用户输入 /读取文件类型吧,用[(row,col),...]存储好每一个输入后,得到最大的 row 和 column 数,再用 sparse 得到稀疏矩阵
yemenchun1
2017-08-19 19:19:26 +08:00
简单啊,numpy,先建立二维 zeros nparray,在把那些变为一。二行搞定。
wisej
2017-08-19 21:28:08 +08:00
scipy 的稀疏矩阵,通过输入数据建立 row,column,value 三个列表就好了。如果检测到有新输入数据就再 append ?

最后咋解决的记得说一哈
yemenchun1
2017-08-19 21:48:30 +08:00
<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>
yemenchun1
2017-08-19 21:49:02 +08:00
yemenchun1
2017-08-19 21:51:20 +08:00
yemenchun1
2017-08-19 21:52:20 +08:00
不会发图..算了, 贴 Gist 了
laike9m
2017-08-20 01:53:04 +08:00
问题是为什么一定要建立一个矩阵,如果矩阵稀疏,直接用你输入数据的方式来存不就好了,搜索起来也足够快
asdf123101
2017-08-20 23:29:32 +08:00
用 scipy spares matrix 然后 hard code。最直接的方法了吧。
hx1997
2017-08-20 23:32:57 +08:00
@imn1 #7 我用楼上的稀疏矩阵解决了。不过看到你这个想法确实惊到,我就想不出位运算的方法,学习了,谢谢
hx1997
2017-08-20 23:38:08 +08:00
@blankme #8
@Allianzcortex #9
@yemenchun1 #10
@wisej #11
@yemenchun1 #14
@asdf123101 #17
用 SciPy 的稀疏矩阵解决了,感谢各位帮助!🙏

@laike9m #16
因为要对矩阵进行运算的,直接存不方便运算,还是谢谢:)
hx1997
2017-08-20 23:41:59 +08:00
还有就是因为数据范围太大,NumPy 的矩阵处理不来,只能用稀疏矩阵...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/384191

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX