python for循环,列表推导、numpy三者的运算速度对比

Noya ·
更新时间:2024-09-21
· 650 次阅读

在Python中,我们要尽量的对数据计算选择使用numpy格式, 不要过得使用for,for循环计算效率很低,一般情况下,列表推导的计算速度介于两者之间。 这里我将三者做一个对比,所做的案例就是将矩阵上的每个元素, 在原来数值的基础上都加上1。这是一个简单的操作,对比一下,每种方法所花的计算的时间。

这里就是使用sklearn的美国加州房价的数据集的特征X作为我们的矩阵数据集。

import pandas as pd from sklearn.datasets import fetch_california_housing HOUSE = fetch_california_housing() X = HOUSE.data

这里的特征矩阵X是一个 20640行8列的数据集,类型为ndnarray

使用for循环 %%time RES = [] for i in range(X.shape[0]): res = [] for j in range(X.shape[1]): res.append(X[i,j]+1) RES.append(res) pd.DataFrame(RES).head(3)

在这里插入图片描述
2.使用列表推导式
注意: 这里我将使用两层嵌套的列表推导
格式为:【 [expression for i in a ] for j in b 】expression包含 i,j的 表达式,类似于包含自变量为i,j的函数。

%%time res1 = pd.DataFrame([[(X[j,i]+1) for i in range(X.shape[1])] for j in range(X.shape[0])]) res1.head(3)

在这里插入图片描述
不过令我奇怪的是这里所花的时间竟然比for循环还长

直接使用numpy矩阵 %%time res2 = pd.DataFrame(X + 1) res2.head(3)

在这里插入图片描述

很显然,计算速度快了可不是一点点呀。毕竟numpy的及时C++写的,所以,以后用到数据计算的时候,尽量使用numpy矩阵计算,少使用for循环。


作者:上大博尔特



python for循环 列表 NumPy for 运算速度 for循环 Python

需要 登录 后方可回复, 如果你还没有账号请 注册新账号