假设现在有这样的一段输入数据:
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。因为输入数据的数据范围不清楚所以不能提前建好固定维数的矩阵再填充... 只能想到笨办法,不知道有没有巧妙点的办法...
1
XiaoFaye 2017-08-19 16:00:11 +08:00 1
二维数组不行吗?
|
2
bugcoder 2017-08-19 16:30:46 +08:00 via iPad 1
转化为稀疏矩阵?然后就用稀疏矩阵或者稀疏转满矩阵
|
3
katsusan 2017-08-19 16:44:06 +08:00 via iPhone 1
输入数据的数据范围不清楚是什么意思..
是会有数据源源不断加入导致矩阵扩充么 直观上感觉生成的矩阵大小只能死算, 行数应该是 max(输入数据的第一列值),列数是 max(第二列中的值) |
4
lzhCoooder 2017-08-19 16:54:33 +08:00 1
感觉是问稀疏矩阵问题,试一下 scipy.sparse
|
5
hx1997 OP @XiaoFaye [[0, 0, 1], [0, 1, 0]] 这样的列表吗?那如果我现在想把第 1000 行第 1 列置 1 呢?只能先 append 990+ 次 [0, 0, 0]??还有如果是 1000 行 4 列怎么把所有行向量改成四维呢?
|
6
hx1997 OP |
7
imn1 2017-08-19 17:34:03 +08:00 1
稀疏矩阵不会
但这道题我会把第一个矩阵转为一维,一行就是一个整数,用二进制移位以及二进制补零计算 然后把最终的一维数列,转为二进制显示,并拆分为矩阵 |
8
blankme 2017-08-19 18:00:19 +08:00 1
存成稀疏矩阵,后续计算也不用展开,python 可以直接作稀疏矩阵运算
|
9
Allianzcortex 2017-08-19 19:05:01 +08:00 1
输入的不属于流式数据而是更偏向用户输入 /读取文件类型吧,用[(row,col),...]存储好每一个输入后,得到最大的 row 和 column 数,再用 sparse 得到稀疏矩阵
|
10
yemenchun1 2017-08-19 19:19:26 +08:00 via iPhone 1
简单啊,numpy,先建立二维 zeros nparray,在把那些变为一。二行搞定。
|
11
wisej 2017-08-19 21:28:08 +08:00 via Android 1
scipy 的稀疏矩阵,通过输入数据建立 row,column,value 三个列表就好了。如果检测到有新输入数据就再 append ?
最后咋解决的记得说一哈 |
12
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>
|
13
yemenchun1 2017-08-19 21:49:02 +08:00
|
14
yemenchun1 2017-08-19 21:51:20 +08:00
|
15
yemenchun1 2017-08-19 21:52:20 +08:00
不会发图..算了, 贴 Gist 了
|
16
laike9m 2017-08-20 01:53:04 +08:00 via Android 1
问题是为什么一定要建立一个矩阵,如果矩阵稀疏,直接用你输入数据的方式来存不就好了,搜索起来也足够快
|
17
asdf123101 2017-08-20 23:29:32 +08:00 via Android 1
用 scipy spares matrix 然后 hard code。最直接的方法了吧。
|
19
hx1997 OP @blankme #8
@Allianzcortex #9 @yemenchun1 #10 @wisej #11 @yemenchun1 #14 @asdf123101 #17 用 SciPy 的稀疏矩阵解决了,感谢各位帮助!🙏 @laike9m #16 因为要对矩阵进行运算的,直接存不方便运算,还是谢谢:) |
20
hx1997 OP 还有就是因为数据范围太大,NumPy 的矩阵处理不来,只能用稀疏矩阵...
|