配列の小数部分のみを取得する必要があります。numpy または単に python modf 関数を使用すると便利です。
たとえば、(1000000,3) ほどの大きさの正の小数データの配列を大きくする場合、より便利なことは次のとおりです。
numpy.modf(array)[0]
array-numpy.trunc(array)
私の意見では、メモリ使用量は2の方が高速で安価です...しかし、よくわかりません。python と numpy の専門家はどう思いますか?
配列の小数部分のみを取得する必要があります。numpy または単に python modf 関数を使用すると便利です。
たとえば、(1000000,3) ほどの大きさの正の小数データの配列を大きくする場合、より便利なことは次のとおりです。
numpy.modf(array)[0]
array-numpy.trunc(array)
私の意見では、メモリ使用量は2の方が高速で安価です...しかし、よくわかりません。python と numpy の専門家はどう思いますか?
私は専門家ではないので、timeit
モジュールを使用して速度を確認する必要があります。私はIPythonを使用しています(これにより、タイミングが非常に簡単になります)が、それがなくても、timeit
モジュールはおそらく進むべき道です。
In [21]: a = numpy.random.random((10**6, 3))
In [22]: timeit numpy.modf(a)[0]
10 loops, best of 3: 90.1 ms per loop
In [23]: timeit a-numpy.trunc(a)
10 loops, best of 3: 135 ms per loop
In [24]: timeit numpy.mod(a, 1.0)
10 loops, best of 3: 68.3 ms per loop
In [25]: timeit a % 1.0
10 loops, best of 3: 68.1 ms per loop
最後の 2 つは同等です。メモリの使用についてはよくわかりませんが、単純に mod を直接取得するよりも多くのメモリを使用しなかった場合は驚くでしょmodf(a)[0]
うa-numpy.trunc(a)
。
[ところで、あなたのコードがあなたのやりたいことをやっていて、改善だけに興味があるなら、codereview stackexchangeに興味があるかもしれません。境界線がどこにあるかはまだよくわかりませんが、これは彼らのお茶のカップのように感じます.]