python 矩阵运算 gpu_使用向量化、矩阵化、cuda等不同方法加速python程序

使用向量化、矩阵化、cuda等不同方法加速python程序

第一次写知乎文章,本文中如有错误请不吝赐教,各位大大多多包涵。

本文是一次实验室组会的分享内容,对于机器视觉各类问题中经常需要处理大量计算任务的情况,以一个计算点云距离的例子来观察不同处理方法在python编程中对速度的影响。运行程序的电脑CPU型号:i9-9900X,GPU型号:RTX 2080 Ti ,python版本3.8.1 ,使用Jupyter lab编写。

问题描述:

在python中,使用普通方法、向量化、矩阵化、cuda等方法加速计算两组点云间各点的距离

# 初始化数据

import numpy as np

import time

n, m = 10000, 15000

a = np.random.random((n,3)) # 点云A中有n组点

b = np.random.random((m,3)) # 点云B中有m组点普通方法

通过嵌套的循环,计算所有点的距离,距离计算公式为:

equation?tex=+d+%3D+%5Csqrt%7B%28x_%7Ba%7D+-+x_%7Bb%7D%29%5E2+%2B+%28y_%7Ba%7D+-+y_%7Bb%7D%29%5E2+%2B+%28z_%7Ba%7D+-+z_%7Bb%7D%29%5E2%7D+%5C%5C

# 普通计算距离

def cal_distance(a,b):

'''输入a是第一组点,b是第二组点 a=[x,y,z] b=[x,y,z]输出距离'''

d = np.sqrt(np.square(a[0] - b[0]) + np.square(a[1] - b[1]) + np.square(a[2] - b[2]))

return d

# 开始计算

t_1_start = time.time()

common_result = []

for j in range(m):

for i in range(n):

common_result.append(cal_distance(a[i],b[j]))

# 结束

t_1_end = time.time()

t_1 = t_1_end - t_1_start

print('普通计算时间:', t_1, 's')普通计算时间: 950.3101623058319 s

common_result = np.array(common_result).reshape(m,n).T # 元素按照dij表示点云A中第i个点到点云B中第j个点的距离值的格式排列向量化方法

将数据A以重复m次的方式扩展,数据B以复制的方式扩展,实现A中任一点对B中所有点的对应关系。即:

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值