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

	在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

  1. 使用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循环还长

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

在这里插入图片描述

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

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值