Numpy基于逻辑和值相同形状的数组中的元素替换元素



我有2个numpy数组。一个充满布尔值和其他数值。

我将如何基于布尔数组中的当前值在数值数组上执行逻辑。

例如。如果为true和> 5,则使值false

matrix1
matrix2
newMatrix = matrix1 > 5 where matrix2 value is false

请注意,这些阵列具有相同的形状,例如

[[0, 1, 1],  
[1, 0, 0]]

[[3, 1, 0]  
[6, 2, 6]]

我想要的结果将是一个新的布尔矩阵,如果其值在布尔数组中为真,并且数值数组中的等效值超过5,例如。

[[0, 0, 0]  
[1, 0, 0]]
newMatrix = np.logical_and(matrix2 == 0, matrix1 > 5 )

这将在所有元素上迭代,并在matrix == 0matrix1 > 5的布尔值对之间进行"one_answers"。请注意,matrix1 > 5表达式类型会生成布尔值的矩阵。

如果要0,1而不是false,则可以将 0添加到结果:

newMatrix = np.logical_and(matrix2 == 0, matrix1 > 5 ) + 0

clearest 方式:

import numpy as np
matrix1 = np.array([[3, 1, 0],
                    [6, 2, 6]])
matrix2 = np.array([[0, 1, 1],
                    [1, 0, 0]])
r,c = matrix1.shape
res = np.zeros((r,c))
for i in range(r):
    for j in range(c):
        if matrix1[i,j]>5 and matrix2[i,j]==1:
            res[i,j]=1

结果

array([[0., 0., 0.],
       [1., 0., 0.]])

a fancier 使用numpy.where()

import numpy as np
matrix1 = np.array([[3, 1, 0],
                    [6, 2, 6]])
matrix2 = np.array([[0, 1, 1],
                    [1, 0, 0]])
r,c = matrix1.shape
res = np.zeros((r,c))
res[np.where((matrix1>5) & (matrix2==1))]=1

结果

array([[0., 0., 0.],
       [1., 0., 0.]])

相关内容

  • 没有找到相关文章

最新更新