Вы бы использовали NumPy, если бы вы просто манипулировали последовательностью двоичных значений? - PullRequest
3 голосов
/ 20 февраля 2010

Есть ли преимущество использования numpy, когда вы выполняете большое количество операций со списками двоичных значений? Как насчет целых чисел в небольшом диапазоне (например, только числа 1,2 и 3?)

Ответы [ 2 ]

3 голосов
/ 20 февраля 2010

Устранение циклов является источником увеличения производительности (10x):

import profile
import numpy as NP

def np_test(a2darray) :
  row_sums = NP.sum(a2darray, axis=1)
  return NP.sum(row_sums)

def stdlib_test2(a2dlist) :
  return sum([sum(row) for row in a2dlist])

A = NP.random.randint(1, 6, 1e7).reshape(1e4, 1e3)
B = NP.ndarray.tolist(A)

profile.run("np_test(A)")
profile.run("stdlib_test2(B)")

NumPy

  • 10 вызовов функций в 0.025 CPU секунд

списки

  • 10005 вызовов функций в 0.280 CPU секунд * * тысяча двадцать-одна
1 голос
/ 20 февраля 2010

Если количество входных значений огромно или если вы выполняете много операций, вы можете попробовать bitarray . Или, см. bool / int8 / uint8 dtype в ndarray Нампи:

In [1]: import numpy as np
In [2]: data = np.array([0,1,1,0], dtype=bool)
In [3]: data
Out[3]: array([False,  True,  True, False], dtype=bool)
In [4]: data.size
Out[4]: 4
In [5]: data.nbytes
Out[5]: 4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...