在一个数组中有许多numpy数组操作

时间:2014-11-24 13:14:42

标签: python numpy

我需要将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代码一样。

1 个答案:

答案 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表示布尔值,这就是我们在这里所拥有的