[Numpy-discussion] Assignment when there is nothing to assign

Keith Goodman kwgoodman at gmail.com
Thu Dec 21 13:17:20 CST 2006


On 12/21/06, Keith Goodman <kwgoodman at gmail.com> wrote:
> I have the following two lines in a for loop:
>
> if len(idx):
>     x[idx,i] = x[idx,i-1]
>
> where idx is the output of a where statement.
>
> I need the 'if len(idx)' line to prevent an error when idx is empty.
>
> Would it make sense to allow
>
> x[idx,i] = x[idx,i-1]
>
> when idx is empty instead of raising an error?
>
> The error I get is
>
> ValueError: array is not broadcastable to correct shape

Why doesn't this work?

>> y

matrix([[ 0.93473209,  0.34122426],
        [ 0.68353656,  0.77589206],
        [ 0.50677768,  0.25089722]])
>> idx = M.array([1, 2])
>> y[idx,0]                              <------this works

matrix([[ 0.68353656],
        [ 0.50677768]])
>> y[idx,0] = y[idx,1]             <------but this doesn't
---------------------------------------------------------------------------
exceptions.ValueError                                Traceback (most
recent call last)

ValueError: array is not broadcastable to correct shape


But this works:

>> idx = M.asarray(M.asmatrix(idx).T)
>> y[idx,0] = y[idx,1]


More information about the Numpy-discussion mailing list