В этом случае «время обработки» не во многом связано с тем, что это в основном вопрос поиска указателей. Поскольку вы отметили сообщение big-O, это будет O(n)
. При преобразовании Python list
в массив Numpy он зарезервирует память для хранения целых чисел len(my_list)
в массиве - вы можете точно узнать, сколько памяти это, увидев, что тип int по умолчанию на вашем Numpy, и используя атрибут .itemsize
dtype
объекта:
>>> np.dtype('int')
dtype('int64')
>>> np.dtype('int').itemsize
8
Так этот массив потребуется 8 * len(my_list)
байт для хранения в верхней части памяти уже используемой исходной my_list
.
Это нужно будет перебрать каждый элемент в списке, посмотреть, какой тип Python объекта он (помните, Python list
s может быть неоднородным - нет никакого способа узнать, априори, что каждый элемент в список будет преобразован в целое число). Затем Numpy сделает все возможное, чтобы преобразовать этот объект Python в целое число и сохранить его в списке.
В зависимости от того, где эти 18 миллионов целых чисел поступают из него, может быть желательно не хранить их в Python list
в первую очередь, если это вообще возможно. Но говорить что-нибудь еще об этом потребует более подробных вопросов.
Ярмарка достаточно. Похоже, я должен просто начать все в мирном мире. Много раз я вижу вещи, которые говорят «о, это технически лучше, но конечный результат не имеет значения», но я думаю, что мои наборы данных могут быть достаточно большими, чтобы его стоило переписать код. Спасибо за информацию. – Howard
Ну, конечно, это полностью зависит. И, как и большинство вещей, все зависит от того, как вы его используете. Но это хорошая ставка. Если у вас есть более конкретные вопросы о вашем коде, тогда можно сказать больше. – Iguananaut