Создать новый массив NumPy из списка или кортежа - PullRequest
1 голос
/ 20 мая 2019

При создании новых массивов numpy вы можете сделать их так:

a = numpy.array((2, 5))
b = numpy.array((a[0] + 1, 10))

или примерно так:

a = numpy.array([2, 5])
b = numpy.array([a[0] + 1, 10])

Какой способ лучше?

1 Ответ

2 голосов
/ 20 мая 2019

Кортежи примерно на 10% быстрее.

>>> timeit.timeit("numpy.array((2, 5))", setup="import numpy")
0.9039838570024585
>>> timeit.timeit("numpy.array([2, 5])", setup="import numpy")
1.0044978570003877

Я получил те же результаты, что и на примере numpy.array((a[0] + 1, 10)).Инструмент dis раскрывает причину этой разницы:

>>> dis.dis("numpy.array((2, 5))")
  1           0 LOAD_NAME                0 (numpy)
              2 LOAD_METHOD              1 (array)
              4 LOAD_CONST               0 ((2, 5))
              6 CALL_METHOD              1
              8 RETURN_VALUE
>>> dis.dis("numpy.array([2, 5])")
  1           0 LOAD_NAME                0 (numpy)
              2 LOAD_METHOD              1 (array)
              4 LOAD_CONST               0 (2)
              6 LOAD_CONST               1 (5)
              8 BUILD_LIST               2
             10 CALL_METHOD              1
             12 RETURN_VALUE

Кажется, кортеж обрабатывается как отдельный объект при его создании, тогда как список необходимо построить.

...