Skip to content

Masked arrays don't properly edit views #5558

@jakirkham

Description

@jakirkham

I tried to change the mask of a through a subindexed view, but was unable. Using this setup I can reproduce this in the 1.9.1 version of NumPy.

import numpy as np

a = np.arange(6).reshape(2,3)
a = np.ma.masked_array(a, mask=np.ma.getmaskarray(a), shrink=False)

b = a[1:2,1:2]

c = np.zeros(b.shape, b.dtype)
c = np.ma.masked_array(c, mask=np.ma.getmaskarray(c), shrink=False)
c[:] = np.ma.masked

This yields what one would expect for a, b, and c (seen below).

 masked_array(data =
   [[0 1 2]
    [3 4 5]],
              mask =
   [[False False False]
    [False False False]],
         fill_value = 999999)

 masked_array(data =
   [[4]],
              mask =
   [[False]],
         fill_value = 999999)

 masked_array(data =
   [[--]],
              mask =
   [[ True]],
         fill_value = 999999)

Now, it would seem reasonable that to copy data into b from c one can use __setitem__ (seen below).

 b[:] = c

This results in new data and mask for b.

 masked_array(data =
   [[--]],
              mask =
   [[ True]],
         fill_value = 999999)

This should, in turn, change a. However, the mask of a remains unchanged (seen below).

 masked_array(data =
   [[0 1 2]
    [3 0 5]],
              mask =
   [[False False False]
    [False False False]],
         fill_value = 999999)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions