我有一个奇怪的问题。
有一张图片,我只需要重新计算非零像素。而且我想通过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
完成吗?
答案 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. ]])