Search code examples
pythonnumpyvariable-assignmentslice

Why does an assignment for double-sliced numpy arrays not work?


why do the following lines not work as I expect?

import numpy as np
a = np.array([0,1,2,1,1])
a[a==1][1:] = 3
print a
>>> [0 1 2 1 1]
# I would expect [0 1 2 3 3]

Is this a 'bug' or is there another recommended way to this?

On the other hand, the following works:

a[a==1] = 3
print a
>>> [0 3 2 3 3]

Cheers, Philipp


Solution

  • It appears you simply can't do an assignment through a double-slice like that.

    This works though:

    a[numpy.where(a==1)[0][1:]] = 3