无论如何基本上采用numpy数组的列,并且每当绝对值大于数字时,将值设置为该有符号数。
即。
for val in col:
if abs(val) > max:
val = (signed) max
我知道这可以通过循环等来完成,但我想知道是否有更清洁/内置的方法来做到这一点。
我看到有类似的东西
arr[arr > 255] = x
这是我想要的,但我想通过列而不是整个数组来做这件事。作为奖励可能是做绝对值的一种方式,而不是必须为正面和负面做两个单独的操作。
scientific1st的答案很好,但它并没有让你一路走来。坦率地说,这有点像RTFM情况。但是,如果你第一次尝试不去浏览Numpy indexing docs就会被原谅,因为它们很密集,如果你来自更传统的编程环境,数据模型将是陌生的。
你必须在要剪辑的列上使用np.clip
,如下所示:
x[:,2] = np.clip(x[:,2], 0, 255)
这将np.clip
应用于数组的第二列,“切片”所有行,然后将其重新分配给第二列。 :
是Python语法,意思是“给我一个可索引序列的所有元素”。
更一般地,您可以使用以相同方式发现的布尔子集索引,方法是切换行并选择所需的列:
x[x[:,2] > 255, 2] = -1
尝试在你的numpy数组上调用clip:
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])