V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
hx1997
V2EX  ›  Python

请教一个 Python 矩阵的问题

  •  
  •   hx1997 ·
    hx1997 · 2017-08-19 15:58:00 +08:00 · 2688 次点击
    这是一个创建于 2688 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    20 条回复    2017-08-20 23:41:59 +08:00
    XiaoFaye
        1
    XiaoFaye  
       2017-08-19 16:00:11 +08:00   ❤️ 1
    二维数组不行吗?
    bugcoder
        2
    bugcoder  
       2017-08-19 16:30:46 +08:00 via iPad   ❤️ 1
    转化为稀疏矩阵?然后就用稀疏矩阵或者稀疏转满矩阵
    katsusan
        3
    katsusan  
       2017-08-19 16:44:06 +08:00 via iPhone   ❤️ 1
    输入数据的数据范围不清楚是什么意思..
    是会有数据源源不断加入导致矩阵扩充么

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

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

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

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

    @laike9m #16
    因为要对矩阵进行运算的,直接存不方便运算,还是谢谢:)
    hx1997
        20
    hx1997  
    OP
       2017-08-20 23:41:59 +08:00
    还有就是因为数据范围太大,NumPy 的矩阵处理不来,只能用稀疏矩阵...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2897 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 08:08 · PVG 16:08 · LAX 00:08 · JFK 03:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.