python 两列相减_Python中的二维矩阵“相减”——答东小羊问

问题描述:

在一个 220*2 的矩阵 A 中,以行为单位(即每行),行与行之间不存在重复的数据。现已经得到了矩阵 A 中的 i 行数据构成的矩阵 B,求另外 220-i 行数据构成的矩阵 C 。

问题分析:

很明显这个问题其实并不难,我们最容易想到的解决办法就是for循环,一个不行就两个,两个不行就三个……但如果要求你尽可能少的使用for循环时,这个问题又该如何处理呢?

本文实验环境:Python 3.6.1 |Anaconda 4.4.0 (64-bit)

方案1

拼接矩阵 + 虚数转化 + 计数器

针对东小羊的这个具体的应用场景,可以一个for循环也不使用。我们将B矩阵拼接在A矩阵的下方,得到拼接矩阵A_B,由于只有两列数据,所以我们借助虚数的概念,将每一行数据转化为一个整体,再使用计数器判断矩阵A_B中每个元素的个数,其中个数为1的即是我们要寻找的数据。创建 get_others.py 代码如下:

import numpy as np

from collections import Counter

mat = np.arange(20).reshape((10, 2))

sample_1 = np.arange(0, 6).reshape((3, 2)) # 测试样例

############# 关键代码开始 #############

con_mat = np.concatenate((mat, sample_1), axis=0) # 拼接矩阵

x = con_mat[:, 0] + con_mat[:, 1] *

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值