使用numpy数组的元素逻辑检查

时间:2013-10-31 15:18:35

标签: python arrays numpy

我有一个尺寸为(10x10)的数组,我想创建另一个(10x10)。假设第一个被称为A而第二个被称为B.如果A的值分别为零,或者另一个值(由我指定),如果A的值不为零,则我希望B具有0值。

类似的东西

B[i] = A[i] == 0 ? 0 : c

这可以通过numpy自动完成吗?像这样:

B = A == 0 ? 0:c

或者我必须逐个遍历数组吗?

编辑以获取更多信息:

我有一个numpy Array(10x10)A和一个B相同的尺寸。我创建了另一个

dif = A-B

现在A有零元素,B有两个,ergo dif有一些零元素

我想创建另一个C numpy数组,其中如果A的元素为零,则C中的值将为零但如果不是则则值为dif / A(元素的除法)

1 个答案:

答案 0 :(得分:3)

您可以使用np.where

>>> A
array([[3, 2, 0, 3],
       [0, 3, 3, 0],
       [3, 1, 1, 0],
       [2, 1, 3, 1]])

>>> np.where(A==0, 0, 5)
array([[5, 5, 0, 5],
       [0, 5, 5, 0],
       [5, 5, 5, 0],
       [5, 5, 5, 5]])

这基本上说明A==0放置0其他地方5.第二和第三个参数可以是多维数组,只要它们与掩码匹配相同的维度。

C
array([[7, 8, 8, 6],
       [5, 7, 5, 5],
       [6, 9, 9, 9],
       [9, 7, 5, 8]])

np.where(A==0 ,0, C)
array([[7, 8, 0, 6],
       [0, 7, 5, 0],
       [6, 9, 9, 0],
       [9, 7, 5, 8]])

D
array([[145, 179, 123, 129],
       [173, 156, 108, 130],
       [186, 162, 157, 197],
       [178, 160, 176, 103]])

np.where(A==0, D, C)
array([[  7,   8, 123,   6],
       [173,   7,   5, 130],
       [  6,   9,   9, 197],
       [  9,   7,   5,   8]])