3

配列の小数部分のみを取得する必要があります。numpy または単に python modf 関数を使用すると便利です。

たとえば、(1000000,3) ほどの大きさの正の小数データの配列を大きくする場合、より便利なことは次のとおりです。

numpy.modf(array)[0]  
array-numpy.trunc(array)

私の意見では、メモリ使用量は2の方が高速で安価です...しかし、よくわかりません。python と numpy の専門家はどう思いますか?

4

1 に答える 1

6

私は専門家ではないので、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に興味があるかもしれません。境界線がどこにあるかはまだよくわかりませんが、これは彼らのお茶のカップのように感じます.]

于 2012-11-05T15:40:10.490 に答える