Я обнаружил, что узким местом в моей программе является создание массивов numpy из списка заданных значений, чаще всего помещая четыре значения в массив 2x2. Существует очевидный, легко читаемый способ сделать это:
my_array = numpy.array([[1, 3], [2.4, -1]])
который занимает 15 секунд - очень медленно, потому что я делаю это миллионы раз.
Тогда существует гораздо более быстрый, трудно читаемый способ:
my_array = numpy.empty((2,2))
my_array[0,0] = 1
my_array[0,1] = 3
my_array[1,0] = 2.4
my_array[1,1] = -1
Это в 10 раз быстрее, всего за 1 нас.
Есть ли какой-нибудь метод, который является ОБЫЧНЫМ быстрым и легко читаемым?
То, что я пробовал до сих пор: использование asarray
вместо array
не имеет значения; прохождение dtype=float
в array
также не имеет значения. Наконец, я понимаю, что могу сделать это сам:
def make_array_from_list(the_list, num_rows, num_cols):
the_array = np.empty((num_rows, num_cols))
for i in range(num_rows):
for j in range(num_cols):
the_array[i,j] = the_list[i][j]
return the_array
Это создаст массив в 4us, который является средним читабельностью на средней скорости (по сравнению с двумя вышеприведенными подходами). Но на самом деле, я не могу поверить, что нет лучшего подхода, использующего встроенные методы.
Спасибо заранее!