无论如何,基本上都有一个numpy数组的列,并且只要绝对值大于数字,就将值设置为该带符号的数字。
即。
for val in col:
if abs(val) > max:
val = (signed) max
我知道这可以通过循环等来完成,但是我想知道是否有一种更清洁/内置的方式来做到这一点。
我看到有类似的东西
arr[arr > 255] = x
这是我想要的一种,但我想按列而不是整个数组进行。作为奖励,也许可以使用一种方法来确定绝对值,而不必对正负进行两个单独的运算。
答案 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)