2017-05-24 99 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'。