为numpy数组的特定列设置最大值

时间:2019-03-12 17:03:10

标签: python numpy

无论如何,基本上都有一个numpy数组的列,并且只要绝对值大于数字,就将值设置为该带符号的数字。

即。

for val in col:
    if abs(val) > max:
        val = (signed) max

我知道这可以通过循环等来完成,但是我想知道是否有一种更清洁/内置的方式来做到这一点。

我看到有类似的东西

arr[arr > 255] = x

这是我想要的一种,但我想按列而不是整个数组进行。作为奖励,也许可以使用一种方法来确定绝对值,而不必对正负进行两个单独的运算。

3 个答案:

答案 0 :(得分:1)

尝试在numpy数组上调用剪辑:

import numpy as np
values = np.array([-3,-2,-1,0,1,2,3])
values.clip(-2,2)

Out[292]:
array([-2, -2, -1,  0,  1,  2,  2])

答案 1 :(得分:1)

scient1st的回答是好的,但并不能完全解决问题。坦白说,这有点像RTFM的情况。但是您不会在第一次尝试时就嘲笑Numpy indexing docs是可以原谅的,因为如果它们来自较传统的编程环境,则它们密集且数据模型将是陌生的。

您将必须在要剪切的列上使用np.clip,如下所示:

x[:,2] = np.clip(x[:,2], 0, 255)

这将np.clip应用于数组的第二列,“切片”所有行,然后将其重新分配给第二列。 :是Python语法,意思是“给我可索引序列的所有元素”。

更一般地,您可以使用以相同方式发现的布尔子集索引,方法是对行进行切片并选择所需的列:

x[x[:,2] > 255, 2] = -1

答案 2 :(得分:0)

也许有点晚了,但我认为这是一个不错的选择:

import numpy as np

values = np.array([-3,-2,-1,0,1,2,3])
values = np.clip(values,-2,2)