2016-01-30 2 views
0

Я генерировал списки переменной длины, упрощенный пример.Создание массива с фиксированной длиной из списков переменной длины

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] 

Существует немного более элегантный способ, сначала создается пустой массив, заполнить его и затем заполнить хвост с нулями.

Смежные вопросы