Подводя итог: избавьтесь от всех звонков на int
и len
; избавиться от умножения на 0; эффективно создать исходный массив.
def availarray(lengths):
out = np.ones((365, lengths.size))
for i in range(lengths.size):
out[:lengths[i], i] = 0
return out
Это сокращает время выполнения с 49 до 31,7 мкс.
Начиная с массива нулей и заполняя его 1с, работает еще лучше:
def availarray(lengths):
out = np.zeros((365, lengths.size))
for i in range(lengths.size):
out[lengths[i]:, i] = 1
return out
В моем случае это еще больше сокращает время выполнения до 26,3 мкс, что составляет 46% ускорения.