pythonerror32
① python安装时,出现错误导致无法安装是怎么回事
1、Python这个东西04的win7上装不了。08的32位的能装,64位的也装不了。
2、Python中设置标准错了,Python中设置标准为无缓冲有以下三种方法:
(1) 对python加-u参数
(2) 加 PYTHONUNBUFFERED环境变量
(3) sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
我们采用第三种方法,添加 sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)到pyth.py中。再次运行client就可以啦。
② Python:MemoryError
要破这个东西,要先破你的算法。 先别说破这个词了。
梳理你的算法,避免三重循环, 避免大量使用字典的多次嵌套。
显然你的数据量巨大。还用这么耗内存,耗CPU的算法。只有算法改良了才能解决这个问题。即使给你C语编程,你都能把内存用光了。你把矩阵放在字典里,内存肯定吃不消。顺便说一下,你用的python应该是32位的。如果是64位的会好些。
在python里,大数据处理一定要减少字典使用。如果字典项超过一定值比为2万,就要小心。 字典主要是用来统计用,不用来计算。 建议你考虑numpy.array做。如果不想用它就用Array,如果还不想可以用blist(第三方包),最差也要用list。字典虽然查找比list快,但是它耗更多内存。
比如你这个问题,你可以先考虑两步走。不要把算法放在一起,虽然效率高,但是后期维护成本高。
第一步计算“浏览过每种物品的人数”, 这个可以用字典。但是因为要做人与物品的关联,所以,应该是说错了。 应该是“计算某个浏览过某个物品”。
你这里与时间没有关系。算法应该没有计算“时间”加权。
我理解你的算法应该是用户浏览”两个物品时”,则累加两个物品同时浏览次数。
并将次数除以,用户分别浏览i,j次数乘积的开根方。 这本来是一个很简单的算法。 你弄太复杂了。
建议你这样。 你使用两个字典,分别这样
items_browsed_by_user[userid][proct_id]
items_browsed_cross [userid][[proct_id_i, proct_id_j]]
记着在给items_browsed_cross [userid][(proct_id_i, proct_id_j)]赋值时。保证proct_id_i < proct_id_j
这样你只需要一半的内存就可以存i*j矩阵。因为先浏览i, 再j和先j再i, 结果是一样的。
最理想的办法是给userid编写一个编号,从0到number of users, 这样直接用数组就可以存放。不需要字典。 再给proct_id编号用顺序号代替。 这样内存占用更少。只需要一个二维数组就可以存贮数据。
如果内存还不足够,就要引入稀疏矩阵。
如果还不足够,也可以的。每次计算,只计算一行。然后存贮到硬盘上。按行按列分别计算。这在大数据环境里很容易就做到了。
③ 如何在Python中解决MemoryError问题
通常不会遇到这个问题。python解决小问题不会有memory error
可能是使用了大对象也可能是使用了递归。没有合适规划临时或者是堆栈数据的数量。
那么有问题大部分是因为dict或者是list太大了。解决办法是使用优化过的数据结构,比如blist,或者是直接使用numpy的数组,array数据结构等等。
解决办法多。还可以使用64位版本。其实意义不大。python自己不需要管理大内存。也不需要大内存操作。
所以要用分布式架构解决问题。把问题分解成500MB以下的小问题,这样即使是32位的python也可以轻松完成。
内存管理的事情还是交给 C, C++这样的程序比较合适。2GB以下可以使用共享内存。 如果超过了,比如8,16, 96gb等。可以考虑使用数据库去管理。
如果你一定要用大对象也没有关系,其实效率也是挺高的。只是算法要优化。