2017-05-24 61 views
0

这里是我的代码:阵列追加并转化成numpy的

z=12 
co=0 
for x in range(1900,2050): 
     z=x*z 
     co += 1 
     b= [1, 2011, co, z] 

     #conversion start 
     b=np.array(b) 
     c.append(b) 
     d=np.array(c) 
     #conversion end 

如实施例在循环中B排列的第一个值是[1, 2011, 1, 22800 ]

第一转换行之后(B = np.array(b)中)b换成[ 1 2011 4 156755]

C相d的像

[array([ 1, 2011,  1, 22800]), array([  1, 2011,  2, 22812]), array([  1, 2011,  3, 22824]), array([  1, 2011,  4, 22836])] 

示例后4个循环:

[[  1 2011  1 22800] 
[  1 2011  2 22812] 
[  1 2011  3 22824] 
[  1 2011  4 22836]] 

我需要改变的代码转换部,使得输出d阵列具有相同的格式的一个中的示例。现在代码做的是从b创建一个数组,然后将该数组附加到c然后将c转换为numpy数组。 有没有办法更快地做到这一点?由于所有这些代码都处于一个大循环中(未显示),创建,附加和转换需要很长时间才能生成d数组。我不能移动代码,巨大的循环之外,和数学只是为了说明的目的:)

谢谢

+0

为什么不使用numpy来生成'd'数组? Jakevdp的[书籍](http://nbviewer.jupyter.org/github/jakevdp/PythonDataScienceHandbook/blob/master/notebooks/02.02-The-Basics-Of-NumPy-Arrays.ipynb)是'numpy'作品 –

+0

谢谢@MaartenFabré,你有什么特别的想法吗?你给我的链接是美好的,我的问题是我没有时间阅读和测试它...... :( –

+0

而不是zxbca你可以告诉我们你想完成什么,用文字吗? –

回答

0

一般我们建议在列表中累计值,并创建阵列一次,在结束:

In [16]: c=[] 
    ...: z=12 
    ...: co=0 
    ...: for x in range(1900,1904): 
    ...:   z=x*z 
    ...:   co += 1 
    ...:   b= [1, 2011, co, z] 
    ...:   c.append(b) 
    ...:  
In [17]: c 
Out[17]: 
[[1, 2011, 1, 22800], 
[1, 2011, 2, 43342800], 
[1, 2011, 3, 82438005600], 
[1, 2011, 4, 156879524656800]] 
In [18]: np.array(c) 
Out[18]: 
array([[    1,   2011,    1,   22800], 
     [    1,   2011,    2,  43342800], 
     [    1,   2011,    3, 82438005600], 
     [    1,   2011,    4, 156879524656800]], dtype=int64) 

z计算是不现实的,不断增长的非常大 - 太大 '的Int64'。