如果你只是操纵一系列二进制值,你会使用numpy吗?

时间:2010-02-20 04:17:43

标签: python numpy scipy bit-manipulation

当您在二进制值列表上执行大量操作时,使用numpy是否有任何优势?小范围内的整数怎么样(比如数字1,2和3?)

2 个答案:

答案 0 :(得分:3)

消除循环是性能增益的来源(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的

  • 0.025 CPU中进行10次函数调用 秒

<强>列表

  • 10005函数调用 0.280 CPU 秒

答案 1 :(得分:1)

如果输入值的数量很大,或者您正在进行大量操作,则可能需要尝试bitarray。或者,请参阅Numpy的ndarray中的bool / int8 / uint8 dtype:

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