2017-03-28 40 views
-1

這裏是輸入:使用python和numpy,如何將1d列表轉換爲np.array列表?

input_list=[a,b,c,d] 

我希望能得到輸出

output_list=[np.array([a]),np.array([b]),np.array([c]),np.array([d])] 

我知道,每個元素的循環也應該工作,但我不知道是否有快速的方法來完成呢?提前致謝。


這裏是我的代碼三種方法,在速度上沒有大的區別,但第二&第三是更加簡潔。 :

第一方法:t.append(np.array([i])),cost_time = 14.1404731274 seconds

import time 
start_time = time.time() 
for index, row in modified_test_store_raw_df[modified_test_store_raw_df.Open==1].iterrows(): 
    input_value=(list(modified_test_store_raw_df.loc[index,'tuple_map'])) 
    t=[] 
    for i in input_value: 
     t.append(np.array([i])) 
print("--- %s seconds ---" % (time.time() - start_time)) 

第二方法:t=[np.array([x]) for x in input_value],cost_time = 13.7779290676 seconds

import time 
start_time = time.time() 
for index, row in modified_test_store_raw_df[modified_test_store_raw_df.Open==1].iterrows(): 
    input_value=(list(modified_test_store_raw_df.loc[index,'tuple_map'])) 
    t=[np.array([x]) for x in input_value] 
print("--- %s seconds ---" % (time.time() - start_time)) 

第三方法:t=np.array(input_value)[:, None],cost_time = 13.2799420357 seconds

import time 
start_time = time.time() 
for index, row in modified_test_store_raw_df[modified_test_store_raw_df.Open==1].iterrows(): 
    input_value=(list(modified_test_store_raw_df.loc[index,'tuple_map'])) 
    t=np.array(input_value)[:, None] 
print("--- %s seconds ---" % (time.time() - start_time)) 
+0

每個人都在暗示一個列表理解,這當然是一個列表循環。基本上就是這樣。只要你的目標是一個快速的列表。 'numpy'函數會產生某種數組。 – hpaulj

回答

0

您可以使用列表理解:

import numpy as np 
[np.array([x]) for x in input_list] 

但也許你需要這個來代替:

np.array(input_list)[:, None]  
+0

我不確定你的第二種方法。它將所有內容放在一個數組中,而OP爲列表中的每個元素需要不同的數組。 – kmario23

+0

如果元素是不同大小的列表,則第二個將生成列表的對象數組,而不是數組列表。如果它們都是相同大小的1d列表,則結果將是2d數組。只有它們是標量,'None'纔會有幫助。 – hpaulj

+0

@ kmario23是的。第二個選項只是猜測OP可能需要的內容。 – Psidom

0

怎麼樣使用列表理解?

output_list = [ np.array([item]) for item in input_list] 

還是好得多發生器理解:

output_gen = (np.array([item]) for item in input_list) 
相關問題