python笔记5:向量化运算

# -*- coding: utf-8 -*-
#定义:向量化计算是一种特殊的并行计算的方式,它可以在同一时间执行多次操作,通常是对不同的数据执行同样的一个或一批指令,或者说把指令应用于一个数组/向量。

#1. 四则运算
#规则:相同位置的数据进行运算,结果保留在相同的位置。
#语法:S1 op S2


#2. 函数计算
#规则:相同位置的数据进行函数的计算,函数返回结果保留在相同的位置。
#语法:fun(x)

#3. 向量化计算的原则:
#代码中尽可能避免显式的for循环
#过早的优化是魔鬼

#利用python自带的方法生成等差数列:
#局限:只能用于遍历,而且只能是整数
r1_10 = range(1,10,2)
for i in r1_10:
    print(i)
    
r1_10 = range(0.1,10,2)  #报错

#利用numpy,生成一个小数的等差数列
import numpy
r = numpy.arange(0.1,0.5,0.01)

#向量化计算,四则运算
r + r
r - r
r * r
r / r

#函数式的向量化计算
numpy.power(r,5) #计算r的5次方

#向量化运算:比较运算
r > 0.3

#结合过滤进行使用
r[r>0.3] #只保留值大于0.3的数组元素

#矩阵运算,规则比较庞大   可以学习一下“线性代数”的知识
numpy.dot(r,r.T) #1乘n的矩阵 和 n乘1的矩阵相乘,结果是一个1乘1的矩阵,也就是一个值

sum(r*r) #向量中的每个值相乘,然后求和

numpy.dot(r,r.T) == sum(r*r)  #True



#向量化的数据框运算:
from pandas import DataFrame
df = DataFrame({
                'column1':numpy.random.randn(5), #生成随机数
                'column2':numpy.random.randn(5)
                })

df.apply(min) #求数据框中每一列的最小值。需要沿着行做比较,因此axis=0

df.apply(min,axis=1)  #每一行的最小值。求每一行的最小值,需要沿着列做比较,因此axis=1

#判断每个行的所有值是否都大于0
df.apply(
         lambda x: numpy.all(x>0),
         axis=1         
         )

#结合过滤
#如果某一行的所有值都小于0,那么保留该行:
df[df.apply(
            lambda x : numpy.all(x<0),
            axis=1
            
            )]


猜你喜欢

转载自blog.csdn.net/aiyo92/article/details/79130586
今日推荐