[英]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.