2016-01-30 161 views
0

我一直在生成可變長度列表,這是一個簡化的例子。從變長列表創建固定長度的numpy數組

list_1 = [5] * 5 
list_2 = [8] * 10 

然後我想轉換爲np.array進行操作。因此它們需要具有相同的長度(例如1200),尾部可以填充零或者截斷目標長度。

對於8固定的長度,我考慮設立一個零陣列然後填充相應的條目:

np_list_1 = np.zeros(8) 
np_list_1[0:5] = list_1[0:5] 
np_list_2 = np.zeros(8) 
np_list_2[0:8] = list_2[0:8]  # longer lists are truncated 

我已經創建了下面的函數來產生這些

def get_np_fixed_length(list_like, length): 
    list_length = len(list_like) 
    np_array = np.zeros(length) 
    if list_length <= length: 
     np_array[0:list_length] = list_like[:] 
    else: 
     np_array[:] = list_like[0:length] 
    return np_array 

是否有一個更有效的方法來做到這一點? (我在numpy文檔中看不到任何東西)

回答

1

你已經完成了這項工作。您可以使用min函數保存一些行。

np_array = np.zeros(length) 
_l = min(length, len(list_like)) 
np_array[:l] = list_like[:l] 

有一種更優雅的方式,首先創建一個空數組,填充它,然後用零填充尾部。