如何创建具有大于numpy数字的组件的向量



例如,我有这样的向量:

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.

如果您受到内存的约束,这可能会有用(我相信没有创建中间布尔数组)。

最新更新