- 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]
清爽不少
其他
求更简便的方法,但……写循环是不可能写的



