今日、私は関数をプロファイリングして、少なくとも私に奇妙なボトルネックが見つかりました:mask=None
またはmask=0
でマスクされた配列を作成してマスクを初期化しますmask = numまたはmask = 0でマスクされたnumpy配列を作成しているのはなぜですか?
>>> %timeit ma_array = np.ma.array(data, mask=False, copy=False)
1000 loops, best of 3: 438 µs per loop
>>> %timeit ma_array = np.ma.array(data, mask=np.zeros(data.shape, dtype=bool), copy=False)
1000 loops, best of 3: 453 µs per loop
なぜNone
またはを与えている:はるかに速く
>>> import numpy as np
>>> data = np.ones((100, 100, 100))
>>> %timeit ma_array = np.ma.array(data, mask=None, copy=False)
1 loop, best of 3: 803 ms per loop
>>> %timeit ma_array = np.ma.array(data, mask=0, copy=False)
1 loop, best of 3: 807 ms per loop
mask=False
を用いて、または手でマスクを作成する一方れる:すべてゼロしかしdata
同じ形状と非常に遅いです0
約2000倍遅いFalse
またはnp.zeros(data.shape)
としてmask
パラメータ? function docsには、次のように書かれています。
データと同じ形のブール値の配列に変換可能である必要があります。 Trueはマスクされた(つまり無効な)データを示します。
私のpython 3.5を使用して、Windowsの10のnumpyの1.11.0
numpyコードをまだ掘り下げましたか? –