2016-06-02 2 views
1

В итерационных алгоритмах принято много раз использовать большие массивы numpy. Я хочу, чтобы заполнить значение в большой существующий массив numpy, но я нашел, что создать новый массив еще быстрее.Повторное использование массив numpy или создание нового?

>>>import numpy as np 
>>>a=np.arange(10000) 
>>>b=a.copy() 
>>>%timeit b=a+a # Every time create a new array 
100000 loops, best of 3: 9.59 µs per loop 
>>>%timeit b[:]=a+a # Use existing array 
100000 loops, best of 3: 13.3 µs per loop 
>>>%timeit np.copyto(b,a+a) # Another way to use existing array 
100000 loops, best of 3: 13.4 µs per loop 
  • Если есть более быстрый способ использовать уже существующий массив? (например, b)
  • Если такого пути нет, то зачем создавать новый массив быстрее?
  • Есть ли недостаток в том, что каждый раз создавайте новый массив? Я стесняюсь об этом, потому что мои данные большие, и мне нужно назначать его с разной стоимостью на каждой итерации.
+0

Я считаю, что результаты объясняются тем фактом, что когда вы делаете 'b [:] = a + a', он сначала вычисляет a + a и помещает его в массив, а затем присваивает этот массив памяти в b. – Peter

ответ

2
  • np.copyto(b,a);b+=a быстрее, но не самый быстрый способ.
  • np.add(a,a,b) - лучший выбор на данный момент, 100000 циклов, лучше всего 3: 8,66 мкс за цикл.

Возможно, b[:]=a+a будет генерировать некоторые временные вычислительные пространства? Я не знаю. Но используйте «+ =, - =, * =, add», эти ufuns не будут ошибочными.