我有一個超大numpy.float64
格式的數值串列,我想將每個值轉換為0.0
是否有inf
值,并將其余元素決議為簡單的浮點數。
這是我的代碼,效果很好:
# Values in numpy.float64 format.
original_values = [np.float64("Inf"), np.float64(0.02345), np.float64(0.2334)]
# Convert them
parsed_values = [0.0 if x == float("inf") else float(x) for x in original_values]
但這很慢。有什么辦法可以加快這段代碼的速度嗎?map
對or使用任何魔法numpy
(我對這些庫沒有經驗)?
uj5u.com熱心網友回復:
嘿~你可能在問如何用 numpy 更快地完成它,快速的答案是將串列變成一個 numpy 陣列并以 numpy 的方式進行:
import numpy as np
original_values = [np.float64("Inf"), ..., np.float64(0.2334)]
arr = np.array(original_values)
arr[arr == np.inf] = 0
wherearr == np.inf
回傳另一個看起來像的陣列,array([ True, ..., False])
可用于以arr
我展示的方式選擇索引。
希望能幫助到你。
我測驗了一下,應該夠快了:
# Create a huge array
arr = np.random.random(1000000000)
idx = np.random.randint(0, high=1000000000, size=1000000)
arr[idx] = np.inf
# Time the replacement
def replace_inf_with_0(arr=arr):
arr[arr == np.inf] = 0
timeit.Timer(replace_inf_with_0).timeit(number=1)
輸出顯示將所有 1,000,000 inf
s 轉換0
為 1,000,000,000 元素陣列中的 s 需要 1.5 秒。
@Aviónarr.tolist()
最后用于將其轉換回 MongoDB 的串列,這應該是常用的方法。我嘗試了十億大小的陣列,轉換大約需要 30 秒,而創建十億大小的陣列不到 10 秒。因此,請隨意推薦更有效的方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/488957.html