成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

迭代vs向量化,如何提升Pandas性能?

大數據 數據分析
使用NumPy的向量化可以極大地提高代碼性能,特別是在處理大型數據集時。在處理數值運算時,可以考慮向量化你的代碼,從而獲得更好的性能。

在本文中,我們將探討幾種通過迭代和向量化技術來提高Pandas代碼性能的方法。

迭代是遍歷數據結構元素的過程,而向量化是將操作同時應用于整個數組或數據系列的一種方法,利用底層優化來提高效率。

通過有效地使用這些技術,我們可以加速數據分析任務并提高代碼的效率。

理解迭代和向量化的區別

在這個例子中,我們將使用NumPy比較迭代和向量化的性能。

首先,導入所需的庫并創建一個隨機數據集。

import numpy as np
import time

# 創建一個包含1000萬個數據點的隨機數據集
data = np.random.rand(10000000)
data.shape

(10000000,)

現在,使用for循環(迭代)來計算數據集中各元素的總和。

start_time = time.time()
sum_iter = 0

for i in data:
    sum_iter += i

end_time = time.time()

print("Iteration - Sum:", sum_iter)
Print("Iteration - Time taken:", end_time - start_time, "seconds")

(‘Iteration — Time taken:’, 3.507000207901001, ‘seconds’)

接下來,使用NumPy的內置函數(向量化)來計算數據集中各元素的總和。

start_time = time.time()
sum_vec = np.sum(data)
end_time = time.time()
print("Vectorization - Sum:", sum_vec)
print("Vectorization - Time taken:", end_time - start_time, "seconds")

(‘Vectorization — Time taken:’, 0.006000041961669922, ‘seconds’)

通過比較兩種方法所需的時間,可以觀察到向量化所實現的性能提升。

使用向量化函數加速操作

在這個例子中,我們將演示如何使用向量化函數來加速Python中的操作。我們將比較使用for循環和向量化函數執行操作所需的時間。

首先,導入必要的庫并創建一個包含隨機數的數組。

import numpy as np
import time

# 創建一個包含100萬個隨機數的數組
data = np.random.rand(1000000)
data.shape

(1000000,)

現在,使用for循環執行操作,并計算出所需的時間。

使用for循環

start_time = time.time()
result = []
for value in data:
    result.append(value * 2)
end_time = time.time()

for_loop_time = end_time - start_time
print("Time taken using a for loop: ", for_loop_time)

(‘Time taken using a for loop: ‘, 0.3400001525878906)

接下來,使用向量化函數執行相同的操作,并計算出所需的時間。

使用向量化函數

start_time = time.time()
result = data * 2
end_time = time.time()
vectorized_time = end_time - start_time

print("Time taken using a vectorized function: ", vectorized_time)

(‘Time taken using a vectorized function: ‘, 0.059999942779541016)

最后,比較一下兩種方法所需的時間。

print("Speedup factor: ", for_loop_time / vectorized_time)

(‘Speedup factor: ‘, 5.6666746139602155)

正如在示例中所看到的那樣,向量化函數比for循環快得多。這是因為向量化函數利用了底層優化和硬件能力,使它們更加高效地處理大型數據集上的操作。

使用NumPy向量化優化代碼

向量化是將一個逐個處理元素的算法轉換為一個等效的同時處理多個元素的算法的過程。

這可以帶來顯著的性能提升,特別是在處理大型數據集時。

讓我們從創建一個簡單的NumPy數組并使用迭代和向量化進行加法運算開始。

首先,導入所需的庫并創建一個NumPy數組。

import numpy as np
import time

# 創建一個包含1000萬個元素的NumPy數組
arr = np.arange(1, 10000001)
arr

array([ 1, 2, 3, …, 9999998, 9999999, 10000000])

現在,使用迭代(for循環)執行加法運算。

# 使用for循環進行迭代
start_time = time.time()
result = np.zeros(len(arr))
for i in range(len(arr)):
    result[i] = arr[i] + 1
print("Time taken for iteration: {} seconds".format(time.time() - start_time))

Time taken for iteration: 7.158999681472778 seconds

接下來,使用NumPy向量化執行相同的加法運算。

# 使用NumPy進行向量化
start_time = time.time()
result_vectorized = arr + 1

print("Time taken for vectorization: {} seconds".format(time.time() - start_time))

Time taken for vectorization: 0.01999974250793457 seconds

你會注意到向量化所需的時間明顯低于迭代所需的時間。這展示了NumPy向量化在優化代碼性能方面的強大作用。

現在,看另一個使用更復雜的操作的例子——計算兩組點之間的歐幾里得距離。

# 創建兩組點
points_a = np.random.random((1000000, 2))
points_b = np.random.random((1000000, 2))

首先,使用迭代法計算歐幾里得距離。

def euclidean_distance_iterative(points_a, points_b):
    num_points = len(points_a)
    distances = np.zeros(num_points)
    for i in range(num_points):
        distances[i] = np.sqrt(np.sum((points_a[i] - points_b[i])**2))
    return distances
start_time = time.time()
result_iterative = euclidean_distance_iterative(points_a, points_b)
print("Time taken for iterative Euclidean distance: {} seconds".format(time.time() - start_time))

Time taken for iterative Euclidean distance: 7.052000045776367 seconds

現在,使用NumPy向量化計算歐幾里得距離。

def euclidean_distance_vectorized(points_a, points_b):
    return np.sqrt(np.sum((points_a - points_b)**2, axis=1))
start_time = time.time()
result_vectorized = euclidean_distance_vectorized(points_a, points_b)
print("Time taken for vectorized Euclidean distance: {} seconds".format(time.time() - start_time))

Time taken for vectorized Euclidean distance: 0.03600001335144043 seconds

同樣,你會注意到向量化方法所需的時間要比迭代方法低得多。

總之,使用NumPy的向量化可以極大地提高代碼性能,特別是在處理大型數據集時。在處理數值運算時,可以考慮向量化你的代碼,從而獲得更好的性能。


責任編輯:武曉燕 來源: Python學研大本營
相關推薦

2022-12-05 08:00:00

數據庫向量化數據庫性能

2023-10-15 17:07:35

PandasPython庫

2021-01-04 09:43:24

Python 開發編程語言

2017-11-02 13:20:08

數據處理PythonNumpy

2023-07-28 08:00:00

人工智能向量數據庫

2023-07-31 11:44:38

Pandas性能數組

2024-04-02 11:43:08

向量化編程NEON

2020-02-28 09:26:54

PythonGo語言C語言

2021-12-02 07:02:16

API性能設計

2025-01-22 08:06:38

C#yield數據迭代

2011-11-30 21:59:41

ibmdwDojo

2024-11-21 08:00:00

向量搜索人工智能

2012-04-13 10:00:04

LINQ

2019-06-11 15:25:03

JSON性能前端

2020-10-09 17:43:25

計算機CPU技術

2016-11-01 11:38:50

DNS網站性能

2017-03-13 09:50:00

HadoopHive

2022-12-29 11:37:51

Python循環向量化

2021-11-09 20:18:21

數字化

2023-02-21 14:16:42

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产黄色麻豆视频 | 成人亚洲一区 | 欧美性网| 美女精品一区 | 国产中文一区二区三区 | 国产精品一区二区无线 | 一区二区三区视频在线观看 | 欧美日韩精品一区二区三区四区 | 亚洲成人激情在线观看 | 嫩呦国产一区二区三区av | 高清免费av | 久久一区二区视频 | 色网站在线免费观看 | 色性av| 毛色毛片免费看 | 久久精品网 | 国产成人精品免费视频大全最热 | 亚洲欧美一区二区三区国产精品 | 国产精品揄拍一区二区 | 91精品国产一区二区在线观看 | 97狠狠干 | 欧美国产日本一区 | av网站免费观看 | 伊人超碰 | av毛片 | 97人人澡人人爽91综合色 | 成人免费毛片在线观看 | 久久亚洲一区二区 | 国产成人精品一区二区三区四区 | 91在线一区二区 | 国产精品久久久久免费 | 亚洲一区精品在线 | 亚洲国产成人精品女人久久久 | 亚洲国产精品一区二区第一页 | 久草热在线 | 欧美亚洲视频 | 成人做爰999| 影音先锋中文在线 | 欧美电影免费网站 | 亚洲精品乱码久久久久久按摩观 | 99久久久国产精品 |