python - 使用 lambda 进行 numpy 元素转换?

标签 python arrays numpy vectorization

在 3D numpy 数组中,我需要按如下方式转换每个元素:如果小于 0,则必须变为 0,如果大于 255,则必须变为 255,否则保持原样。

我怎样才能用 numpy 实现它?我在想类似的事情

img.transform_each(transform_func)

在哪里

def transform_func(x):
    if x<0:
        return 0;
    # etc

是否有像 transform_each 这样的构建函数? 我不知道如何手动进行 for-for-for 循环。

最佳答案

您可以使用 clip将数组的值保持在特定范围内。例如:

>>> a = np.array([-1, 23, 312, 47, -5])
>>> a.clip(0, 255)
array([  0,  23, 255,  47,   0])

返回一个包含值的相同形状的新数组 - 如果您想使更改永久生效,则需要将 a 重新分配给这个新数组,否则使用 out 执行操作的参数:

np.clip(a, 0, 255, out=a)

另一种为更复杂的操作开辟道路的方法是 bool 索引的思想。

例如,将数组a中小于0的元素设置为0:

a[a < 0] = 0

或者将2的所有值乘以7,你可以这样写:

a[a == 2] *= 7

关于python - 使用 lambda 进行 numpy 元素转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29015556/

相关文章:

python - 如何提高循环效率?

database - 在服务器上存储多维数组的最佳方式?

arrays - T-SQL 解析包含动态值数组的 JSON

python - 使用 numpy 数组计算累积最小值

python - 找不到有效的 Python 解释器。请在您的 LaTeXTools 设置中设置 python 设置

python - Scipy 稀疏行/列点积

Python 子类看似互相编辑

arrays - 有没有一种干净的方法可以在编译时声明 TBytes 兼容的值?

python - 如何使用Python将RGB565字节数组转换为RGB888字节数组?

python - 向量化逻辑跨越行的 for 循环