Python实现多数组逻辑运算

Python实现多数组逻辑运算

  • MATLAB代码
  • (错误的)Python代码一
  • (错误的)Python代码二
  • (可行的)Python代码
  • 其他

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]

清爽不少


其他

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

你可能感兴趣的:(Python,MATLAB,python,matlab,开发语言)