Вот векторизованное решение. Когда x
и y
являются NumPy массивами
Создайте массивы x
и y
NumPy. Затем используйте этот подход.
x[x==y[:,None]]=0
Полный пример:
x=np.array([[ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.],
[ 0., 1., 2., 3., 4., 5., 6., 7., 0., 9., 10.]])
y=np.array([2,8])
x[x==y[:,None]]=0
#array([[ 0., 1., 0., 3., 4., 5., 6., 7., 8., 9., 10.],
# [ 0., 1., 2., 3., 4., 5., 6., 7., 0., 9., 10.]])
Анализ времени:
In [50]: timeit x[x==y[:,None]]=0 #My solution
2.2 µs ± 34.6 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
In [53]: timeit [np.where(a==v, 0, a) for v, a in zip(y, x)] #kederrac's solution
10.6 µs ± 309 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
In [54]: %%timeit
...: x = [np.array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.]),
...: np.array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])]
...: y = [2, 8]
...: for i in range(len(x)):
...: arr = x[i]
...: arr[arr == y[i]] = 0
...:
6.61 µs ± 310 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each) #Sam's solution