簡體   English   中英

數組追加並轉換為numpy

[英]array append and conversion to 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看起來像

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

4次循環后d的示例:

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

我需要更改轉換部分中的代碼,以便輸出d數組具有與示例中相同的格式。 現在,代碼要做的是從b創建一個數組,然后將該數組附加到c,然后將c轉換為numpy數組。 有沒有辦法更快地做到這一點? 由於所有這些代碼都處於一個大循環中(未顯示),因此創建,附加和轉換以生成d數組需要花費大量時間。 而且我無法將代碼移出那個巨大的循環,而數學只是出於解釋的目的:)

謝謝

通常,我們建議在列表中累積值,最后創建一次數組:

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'而言太大。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM