我需要将matlab代码翻译成python numpy代码
我有4个二维数组( A,B,C和D ),并希望创建一个新的“res”。
matlab中的代码
index1 = find(A == 2 & B > C);
index2 = find(A == 2 & B >= D & B <= C);
res = uint8(zeros(100,100));
res(index1) = 5;
res(index2) = 4;
在Python / numpy中我发现我可以创建这样的新数组:
res = ((A == 2) & (B > C)) * 5
res = ((A == 2) & (B >= D) & (B <= C)) * 4
但是如何才能将这2个结果合并为一个数组呢?就像matlab代码一样。
答案 0 :(得分:3)
翻译(在这种情况下)几乎是一对一的:
index1 = ((A == 2) & (B > C))
index2 = ((A == 2) & (B >= D) & (B <= C))
res = np.zeros((100, 100), dtype='uint8')
res[index1] = 5
res[index2] = 4
或者,您可以将res
定义为
res = np.where(A == 2, np.where(B > C, 5, np.where(B >= D, 4, 0)), 0)
虽然我不认为这有助于提高可读性:)
PS。正如E先生建议的那样,mask1
可能是比index1
更好的变量名,因为index
(通常)表示整数值而mask
表示布尔值,这就是我们在这里所拥有的