2
我只需要得到數組的小數部分。 使用numpy或者簡單的python modf函數很方便。numpy數組的小數部分
在情況下,我們積極的分數大數據陣列,即可以像(1000000,3)大的情況下,什麼是更方便的事:
numpy.modf(array)[0]
array-numpy.trunc(array)
在我看來2是更快,更便宜在內存使用...但不確定。 Python和numpy專家認爲什麼?
我只需要得到數組的小數部分。 使用numpy或者簡單的python modf函數很方便。numpy數組的小數部分
在情況下,我們積極的分數大數據陣列,即可以像(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
最後兩個是等價的。我對存儲器的使用瞭解不多,但是如果modf(a)[0]
和a-numpy.trunc(a)
都沒有使用更多內存,而是直接使用mod,我會感到驚訝。 [如果你的代碼做了你想做的事,而你只對改進感興趣,你可能會對the codereview stackexchange感興趣。我仍然沒有很好的處理分界線的位置,但是這種感覺更像是一杯茶。]
謝謝我沒有想過%1,這是我認爲最方便的解決方案因爲它使用純粹的python 問候 – Cobry
我應該希望「專家」也使用'timeit'來檢查速度。在橡膠遇到道路的地方,(通常)不知道如何進行測量,直到您真正測量爲止。 – mgilson
如果使用%= 1,則可以獲得稍微更好的性能。而不是使用新的數組來存儲值,因爲它修改了數組 – EnricoGiampieri