numpy配列のastype()メソッドはそれほど効率的ではありません。私は 3百万のUint8点を含む配列を持っています。それを3x3行列に掛けるには2秒かかりますが、結果をuint16からuint8に変換するのにもう1秒かかります。numpy:配列型を素早く変換する方法
より正確:
print time.clock()
imgarray = np.dot(imgarray, M)/255
print time.clock()
imgarray = imgarray.clip(0, 255)
print time.clock()
imgarray = imgarray.astype('B')
print time.clock()
ドット積及びスケーリングが2秒を要する
クリッピングが200ミリ秒 型変換をとり、他の操作にかかる時間を考えると、1秒
をとり、Iはastype
を期待より速くなる。 タイプ変換を高速に行う方法はありますか、そのタイプ変換がそれほど難しいとは思わないときは間違っていますか?
編集:目標は、あなたがimgarray = imgarray.astype('B')
を使用すると、指定した型にキャスト配列のコピーを、取得ファイル
は、なぜあなたは再びuint16のに行くとする必要があります:
imgarray.view('uint8')[:,::4]
IPythonの%はtimeitコマンドは、大きな速度はこの方法は、物事をやってそこにあることを示していますか? 'M'をuint8の行列にすることは可能ですか?変換する必要はありません。 – u0b34a0f6ae
ドット積の結果はuint8の範囲を超えます。もともと私は浮動小数点型M行列を使用していましたが、整数に行くと少し改善されると思いましたが、これは真実ではありません。 – shodanex
おそらく、そのすべての時間がかかると、すべてのメモリロケーションにアクセスしています。修正するのは難しいと思う。 –