Numpy矩阵计算应用探索

Numpy矩阵计算应用——来自一个小白的学习记录

导火索
应客户要求,要匹配出A、B表中两两门店间的距离。其中A表共有1939家门店,B表共有1081家门店。
在这里插入图片描述

原始思路
1、计算两两门店之间的距离
实现方法:用两层for循环,依次提取每一对门店的经纬度,套用距离函数进行计算
2、把门店除经纬度之外其他信息,匹配进来
实现方法:(问题: 两个Dataframe可以实现笛卡尔积拼接嘛,没有搜到办法)也用两层for循环试试,依次从两个Dataframe中提取信息,拼接成一行,再把结果依次添加到1个空的Datarame中
3、把1和2两部分concat在一起

遇到的问题
for循环操作,数据量会出现乘数效应,内存爆掉。跑了很久也没跑出来,等下去大概率也是不行的。。

最终解决方法:矩阵运算 + stack + merge
1、提取AB两表中的经纬度数据:
是两个Dataframe, shape分别为1939×2 、 1081×2
2、距离计算:
这里先来思考下矩阵的构造:行 列,其实就是平面意义上对每一行,把所有列循环一遍,等同于两层 for循环的功能。而Numpy的强大之处在这里恰好可以得到体现,即不需要使用循环,Numpy的数组之间就可以直接进行矩阵操作,允许使用类似于标量的操作语法(比如可以直接×10 那么数组中每个元素都会×10,或者又可以两个数组相加,则对应位置元素相加)
所以,鉴于for循环太慢,而数组功能强大(当然Dataframe作为Pandas的数据格式,也是完美继承了Numpy数组这个优势的),我们就来借它的优势达到我们的目的。

实现方法:
1> 首先构造用于矩阵运算的表:
(((X1-x2)**2+(y1-y2)**2)**0.5),即这个公式中的x1 x2 y1 y2,构造时要考虑表的shape,应都是1939*1081的(其中表的index为A表的index,column为B表的index),另外表数据在提取时注意维度轴对齐。
在这里插入图片描述
2> 套公式计算距离矩阵:
((X1-x2)**2+(y1-y2)**2)**0.5。这里就是使用了矩阵式运算,对应元素间直接进行操作。

ps:①、进行距离计算前,要先把经纬度转换为平面坐标
在这里插入图片描述
②、距离矩阵的计算也可以参考博客网址:https://blog.csdn.net/LoveCarpenter/article/details/85048291

3、stack操作:
得到距离矩阵后,对表做stack操作,将表index和column降为表的两列(reset_index后),类似于把二维的矩阵拆解为1维的,一个个罗列开来了。
在这里插入图片描述
4、merge操作:
stack后出来两列level_0, level_1,分别对应着AB表的index。所以就通过这两列,先分别去和A、B表进行merge,最后再通过level_0和level_1两列共同作为on条件,实现整体信息的最终merge。这样就把距离和对应的表信息都匹配进来了!!!

总结:以前学Numpy的时候,未体会到它的厉害之处,谨以此文记录Numpy矩阵应用之初探。

如果这篇文章对你有帮助,点个赞再走哦~~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值