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
hss133
V2EX  ›  Python

小白求助:关于 Python 创建非常大的二维数组的几个问题

  •  
  •   hss133 · 2017-04-12 10:01:41 +08:00 · 3668 次点击
    这是一个创建于 2808 天前的主题,其中的信息可能已经有所发展或是发生改变。
    各位大神,

    我现在需要构造一个 7 万*1 万大小的数组存储一些数据,
    我的大概写法是:
    T=[]
    for i in range(70000):
    --t = [0 for col in range(10000)]
    --t[col]=f(i) //根据 i 会修改 t 中的某些值
    --T.append(t)

    这样可以获得 T,但是巨慢。。。
    电脑直接死机 T^T 。。卡了快一个小时运行完毕。。。

    求问有没有其他解决方法。。。
    19 条回复    2017-04-12 12:54:32 +08:00
    xidianlz
        1
    xidianlz  
       2017-04-12 10:07:22 +08:00   ❤️ 1
    不负责任说一句 用 numpy 吧
    wwqgtxx
        2
    wwqgtxx  
       2017-04-12 10:09:56 +08:00 via iPhone   ❤️ 1
    这么大个二维数组,就算用 c++的 vector 动态分配实现也是慢的可以吧,你可以试试 numpy 的矩阵来保存一下,主要应该是要一次性分配好内存,要不然这样递增式的分配,不慢才怪喽
    954880786
        3
    954880786  
       2017-04-12 10:12:35 +08:00 via iPhone
    构建一个一维数组,然后写个函数做映射?
    Lime
        4
    Lime  
       2017-04-12 10:13:42 +08:00
    假设你 t 里边存的是 32 位 int, 70000 * 10000 * 32 / (1 << 30) = 20G, 电脑内存够么?
    Lime
        5
    Lime  
       2017-04-12 10:17:39 +08:00
    落了个 4, 5G, sorry
    debye
        6
    debye  
       2017-04-12 10:20:50 +08:00
    我在想什么样的场景需要这样做
    真的有这样的数组要求最好还是放数据库中吧
    xiaoyu233
        7
    xiaoyu233  
       2017-04-12 10:23:26 +08:00 via iPhone
    import numpy as np
    smallHao
        8
    smallHao  
       2017-04-12 10:26:31 +08:00 via Android
    Dense or sparse?
    XYxe
        9
    XYxe  
       2017-04-12 10:32:37 +08:00
    @Lime #4 Python 里的 int 占 28 字节
    BingoXuan
        10
    BingoXuan  
       2017-04-12 10:35:05 +08:00 via Android
    pandas + numpy 吧,注意内存消耗
    hss133
        11
    hss133  
    OP
       2017-04-12 11:00:33 +08:00
    @debye 求解一个有几万个约束的优化模型中的一个步骤,需要构造技术矩阵~ 亲测numpy可用
    hss133
        12
    hss133  
    OP
       2017-04-12 11:07:54 +08:00
    非常感谢大家!
    numpy直接生成一个全为零的相应规模的矩阵(因为我的矩阵大部分值是零),然后根据需要修改对应值就可以了!
    rock_cloud
        13
    rock_cloud  
       2017-04-12 11:16:10 +08:00
    如果矩阵是稀疏的, sklearn 中有一些处理稀疏矩阵的算法。
    justou
        14
    justou  
       2017-04-12 11:16:42 +08:00
    @hss133 这种情况用 scipy 的 sparse 创建稀疏矩阵会大大提高效率
    hss133
        15
    hss133  
    OP
       2017-04-12 11:18:58 +08:00
    @justou 嗷,好的我研究下~谢谢!
    whwq2012
        16
    whwq2012  
       2017-04-12 11:38:30 +08:00 via Android
    试试 pypy
    liyvhg
        17
    liyvhg  
       2017-04-12 12:36:20 +08:00 via Android
    MATLAB 。。。
    bazingaterry
        18
    bazingaterry  
       2017-04-12 12:36:44 +08:00 via iPhone
    稀疏矩阵
    fy
        19
    fy  
       2017-04-12 12:54:32 +08:00
    稀疏矩阵啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1127 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:42 · PVG 02:42 · LAX 10:42 · JFK 13:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.