首页 > 解决方案 > 如何仅使用 numpy 操作根据其他两个 numpy 数组的条件获取新的 numpy 数组?

问题描述

假设我有 np.arraya = [0, 1, 1, 0, 0, 1]b = [1, 1, 0, 0, 0, 1]

我想要一个新的矩阵 c 使得ifa[i] = 0然后b[i] = 0c[i] = True

我试过使用c = np.where(a == 0 & b==0),但似乎这不适用于两个阵列。

最终,我想要在不使用任何循环和外部库的情况下计算两种情况下都为真的'0'和两种情况下都为真的'1'。请指教。

标签: pythonarraysnumpy

解决方案


这是我的解决方案:

您的逻辑表达式只不过是 c = NOT (a OR b)。这意味着,c[i] = True只有a[i]b[i]都为零时,您才需要 。OR 可以通过添加两个数组来实现。然后我们将数组转换为布尔类型并将其反转。

import numpy as np

a = np.array([0, 1, 1, 0, 0, 1])
b = np.array([1, 1, 0, 0, 0, 1])

c = np.invert((a+b).astype('bool'))

如果你想计算零的数量,你可以简单地执行

n_zeros = np.sum(c)

更通用的解决方案:

如果你想要你的数组c[i] = Trueif a[i] == a0 and b[i] == b0,你可以这样做:

c = (a == a0) & (b == b0)

条件a == a0b == b0返回每个布尔数组,其中包含每个单独数组元素的条件真值。位运算符&执行逐元素逻辑与。有关更多位运算符,请参阅https://wiki.python.org/moin/BitwiseOperators


推荐阅读