在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循环还长
%%time
res2 = pd.DataFrame(X + 1)
res2.head(3)
很显然,计算速度快了可不是一点点呀。毕竟numpy的及时C++写的,所以,以后用到数据计算的时候,尽量使用numpy矩阵计算,少使用for循环。