每个元素 multiplication/addition 与 numpy 数组
Per element multiplication/addition with numpy arrays
我遇到了一个奇怪的问题。
有一张图片,我只需要重新计算非零像素。我想通过 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
循环中使用 if pixel == 0: continue
来完成它,但它会非常慢。而且我无法摆脱只留下规范化组件的加法。
所以我一直在想,可以通过numpy
吗?
您可以使用 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. ]])
另一种方式是:
matrix = matrix * 2.0 + 0.5 * (matrix!=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. ]])
我遇到了一个奇怪的问题。
有一张图片,我只需要重新计算非零像素。我想通过 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
循环中使用 if pixel == 0: continue
来完成它,但它会非常慢。而且我无法摆脱只留下规范化组件的加法。
所以我一直在想,可以通过numpy
吗?
您可以使用 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. ]])
另一种方式是:
matrix = matrix * 2.0 + 0.5 * (matrix!=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. ]])