为numpy数组的特定列设置max

问题描述 投票:0回答:2

无论如何基本上采用numpy数组的列,并且每当绝对值大于数字时,将值设置为该有符号数。

即。

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

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

我看到有类似的东西

arr[arr > 255] = x

这是我想要的,但我想通过列而不是整个数组来做这件事。作为奖励可能是做绝对值的一种方式,而不是必须为正面和负面做两个单独的操作。

python numpy
2个回答
1
投票

scientific1st的答案很好,但它并没有让你一路走来。坦率地说,这有点像RTFM情况。但是,如果你第一次尝试不去浏览Numpy indexing docs就会被原谅,因为它们很密集,如果你来自更传统的编程环境,数据模型将是陌生的。

你必须在要剪辑的列上使用np.clip,如下所示:

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

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

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

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

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])
© www.soinside.com 2019 - 2024. All rights reserved.