例如,我有这样的向量:
v = np.array([2, 4, 1, 7, 9, 3, 5])
我想将每个组件与一个数字进行比较,以获得一个新的向量,该向量比数字更大(如果原始组件较小,则)。对于上面的示例和limit=3
,结果应为:
np.array([3, 4, 3, 7, 9, 3, 5])
我该如何使用numpy
?
您可以简单地做
v[v <= 3] = 3
为您提供所需的输出:
array([3, 4, 3, 7, 9, 3, 5])
简短说明:
v <= 3
创建一个布尔数组
array([ True, False, True, False, False, True, False], dtype=bool)
和命令
v[v <= 3]
将所有值设置为3
,其中此布尔数组对True
进行评估。
您也可以使用numpy.clip
:
>>> np.clip(v, 3, None)
array([3, 4, 3, 7, 9, 3, 5])
第二个参数是a 最大值,但我只给出了最小值。
这也可以提供out
参数,在这种情况下,如果您作为目标提供,则可以在就位工作:
>>> x = np.clip(v, 3, None, v)
>>> id(x), id(v)
(4357557104, 4357557104)
>>> v
array([3, 4, 3, 7, 9, 3, 5])
>>>
文档:
out : ndarray, optional The results will be placed in this array. It may be the input array for in-place clipping. `out` must be of the right shape to hold the output. Its type is preserved.
如果您受到内存的约束,这可能会有用(我相信没有创建中间布尔数组)。