如果元素满足条件numpy,则从数字中减去元素

时间:2017-05-02 18:23:46

标签: python numpy

说我有数组a=np.random.randn(4,2),我想从100减去每个负面元素。 如果我想从每个元素中减去100,那么我会使用a[(a<0)] -=100.但是如果我想从100中减去每个元素该怎么办?如果不循环遍历每个元素我该怎么做?

2 个答案:

答案 0 :(得分:3)

您可以使用相同的想法:

a[a<0] = 100 - a[a<0]

答案 1 :(得分:1)

您可以使用out s的wherenp.ufunc参数来避免@ Akiiino解决方案中的临时数组:

np.subtract(100, a, out=a, where=a<0)

一般来说,ufunc(a, b, out, where)的含义大致是:

out[where] = ufunc(a[where], b[where])

比较速度:

In [1]: import numpy as np
In [2]: a = np.random.randn(10000, 2)
In [3]: b = a.copy()  # so the that boolean mask doesn't change

In [4]: %timeit a[b < 0] = 100 - a[b < 0]
307 µs ± 1.53 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [5]: %timeit np.subtract(100, a, out=a, where=b < 0)
260 µs ± 39.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

我们发现这里的速度提升了约15%