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

2017-04-12 10:01:41 +08:00
 hss133
各位大神,

我现在需要构造一个 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 。。卡了快一个小时运行完毕。。。

求问有没有其他解决方法。。。
3640 次点击
所在节点    Python
19 条回复
xidianlz
2017-04-12 10:07:22 +08:00
不负责任说一句 用 numpy 吧
wwqgtxx
2017-04-12 10:09:56 +08:00
这么大个二维数组,就算用 c++的 vector 动态分配实现也是慢的可以吧,你可以试试 numpy 的矩阵来保存一下,主要应该是要一次性分配好内存,要不然这样递增式的分配,不慢才怪喽
954880786
2017-04-12 10:12:35 +08:00
构建一个一维数组,然后写个函数做映射?
Lime
2017-04-12 10:13:42 +08:00
假设你 t 里边存的是 32 位 int, 70000 * 10000 * 32 / (1 << 30) = 20G, 电脑内存够么?
Lime
2017-04-12 10:17:39 +08:00
落了个 4, 5G, sorry
debye
2017-04-12 10:20:50 +08:00
我在想什么样的场景需要这样做
真的有这样的数组要求最好还是放数据库中吧
xiaoyu233
2017-04-12 10:23:26 +08:00
import numpy as np
smallHao
2017-04-12 10:26:31 +08:00
Dense or sparse?
XYxe
2017-04-12 10:32:37 +08:00
@Lime #4 Python 里的 int 占 28 字节
BingoXuan
2017-04-12 10:35:05 +08:00
pandas + numpy 吧,注意内存消耗
hss133
2017-04-12 11:00:33 +08:00
@debye 求解一个有几万个约束的优化模型中的一个步骤,需要构造技术矩阵~ 亲测numpy可用
hss133
2017-04-12 11:07:54 +08:00
非常感谢大家!
numpy直接生成一个全为零的相应规模的矩阵(因为我的矩阵大部分值是零),然后根据需要修改对应值就可以了!
rock_cloud
2017-04-12 11:16:10 +08:00
如果矩阵是稀疏的, sklearn 中有一些处理稀疏矩阵的算法。
justou
2017-04-12 11:16:42 +08:00
@hss133 这种情况用 scipy 的 sparse 创建稀疏矩阵会大大提高效率
hss133
2017-04-12 11:18:58 +08:00
@justou 嗷,好的我研究下~谢谢!
whwq2012
2017-04-12 11:38:30 +08:00
试试 pypy
liyvhg
2017-04-12 12:36:20 +08:00
MATLAB 。。。
bazingaterry
2017-04-12 12:36:44 +08:00
稀疏矩阵
fy
2017-04-12 12:54:32 +08:00
稀疏矩阵啊

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

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

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

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

© 2021 V2EX