3

バイナリ値のリストに対して多数の操作を行っているときに numpy を使用する利点はありますか? 狭い範囲の整数 (1、2、3 など) はどうですか?

4

2 に答える 2

3

ループをなくすことが、パフォーマンスの向上 (10 倍) の原因です。

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)")

でこぼこ:

  • 0.025 CPU 秒で 10 回の関数呼び出し

リスト:

  • 0.280 CPU 秒で 10005 回の関数呼び出し
于 2010-02-20T12:40:18.943 に答える
1

入力値の数が膨大な場合、または多くの操作を行っている場合は、bitarrayを試してください。または、Numpy の ndarray の // dtype をbool参照int8してください。uint8

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
于 2010-02-20T04:24:44.733 に答える