Python实现多数组逻辑运算

15 篇文章 3 订阅

by 今天不飞了

近日将MATLAB代码改写为Python时遇到一个小麻烦,如正文


MATLAB代码

原题较复杂,简化后大致需求如下

% 已知
a = [1,2,3,4,5]
b = [5,4,3,2,1]
c = [3,2,3,2,3]
% 求
data = [6,6,6,6,6]
newdata = data(a>2 & b>2 & c>2)

唯一的改写问题就在于索引a>2&b>2&c>2,如何在python中实现,侯文中省去其他代码,仅写这一行


(错误的)Python代码一

试图直接用,

newdata = data[a>2 & b>2 & c>2]

报错……
那我改成英文,

newdata = data[a>2 and b>2 and c>2]

就离谱……


(错误的)Python代码二

听说有个np.where

newdata = data[np.where(a>2 & b>2 & c>2)]

额,换汤不换药……


(可行的)Python代码

for循环永远的神,但……写循环是不可能写的
试了一会发现np.where(logical,1,0)的结果支持逻辑运算,那就,

idx = np.where(a>2,1,0) & np.where(b>2,1,0) & np.where(c>2,1,0))
newdata = data[idx>0]

感觉有点复杂,但是能用就行了……
然后又发现了第二种,仅适用于“与”运算

idx = (a>2) * (b>2) * (c>2)
newdata = data[idx]

清爽不少


其他

求更简便的方法,但……写循环是不可能写的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值