每个元素与numpy数组相乘/相加

时间:2019-03-25 10:21:55

标签: python python-3.x numpy slice numpy-ndarray

我有一个奇怪的问题。

有一张图片,我只需要重新计算非零像素。而且我想通过numpy进行此操作,因为我处理了数千张图像,因此我希望它要快。

这是一个简化的示例,具有较低的二值性。

假设我有以下矩阵:

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

假设我想将每个值乘以2.0并加上0.5

matrix = matrix * 2.0 + 0.5

结果是:

[[0.5,  0.5,   2.5],
 [0.5,  4.5,   0.5],
 [0.5,  12.5,  0.5]]

我希望它是

[[0,  0,   2.5],
 [0,  4.5,   0],
 [0,  12.5,  0]]

很显然,我可以在for的{​​{1}}循环中完成此操作,但这会非常慢。而且我无法摆脱仅添加标准化组件的附加功能。

所以我一直在想,可以通过if pixel == 0: continue完成吗?

3 个答案:

答案 0 :(得分:3)

您可以使用np.where以便根据指定条件从x或y中进行选择:

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

np.where(a!=0, a*2. + 0.5, a)

array([[ 0. ,  0. ,  2.5],
       [ 0. ,  4.5,  0. ],
       [ 0. , 12.5,  0. ]])

答案 1 :(得分:1)

另一种方式是:

matrix = matrix * 2.0 + 0.5 * (matrix!=0)

答案 2 :(得分:0)

您可能想知道另一种使用np.where的方法。在这里,您检查值是否小于1,将其分配给0

matrix = matrix*2 + 0.5
np.where(matrix<1, 0, matrix)
# array([[ 0. ,  0. ,  2.5],
#        [ 0. ,  4.5,  0. ],
#        [ 0. , 12.5,  0. ]])