Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 80a000b

Browse files
committed
streamline handling of masked values in Path.__init__
svn path=/trunk/matplotlib/; revision=4893
1 parent 0107a13 commit 80a000b

1 file changed

Lines changed: 9 additions & 11 deletions

File tree

lib/matplotlib/path.py

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ def __init__(self, vertices, codes=None):
101101
mask = ma.nomask
102102

103103
if codes is not None:
104-
codes = npy.asarray(codes, self.code_type)
104+
codes = npy.asarray(codes, self.code_type)
105105
assert codes.ndim == 1
106106
assert len(codes) == len(vertices)
107107

@@ -112,25 +112,23 @@ def __init__(self, vertices, codes=None):
112112
# MOVETO commands to the codes array accordingly.
113113
if is_mask:
114114
if mask is not ma.nomask:
115-
mask1d = ma.mask_or(mask[:, 0], mask[:, 1])
115+
mask1d = npy.logical_or.reduce(mask, axis=1)
116+
gmask1d = npy.invert(mask1d)
116117
if codes is None:
117-
codes = self.LINETO * npy.ones(
118-
len(vertices), self.code_type)
118+
codes = npy.empty((len(vertices)), self.code_type)
119+
codes.fill(self.LINETO)
119120
codes[0] = self.MOVETO
120-
vertices = npy.compress(npy.invert(mask1d), vertices, 0)
121-
vertices = npy.asarray(vertices)
122-
codes = npy.where(npy.concatenate((mask1d[-1:], mask1d[:-1])),
123-
self.MOVETO, codes)
124-
codes = ma.masked_array(codes, mask=mask1d).compressed()
125-
codes = npy.asarray(codes, self.code_type)
121+
vertices = vertices[gmask1d].filled() # ndarray
122+
codes[npy.roll(mask1d, 1)] = self.MOVETO
123+
codes = codes[gmask1d] # npy.compress is much slower
126124
else:
127125
vertices = npy.asarray(vertices, npy.float_)
128126

129127
assert vertices.ndim == 2
130128
assert vertices.shape[1] == 2
131129

132130
self.codes = codes
133-
self.vertices = vertices
131+
self.vertices = vertices
134132

135133
#@staticmethod
136134
def make_compound_path(*args):

0 commit comments

Comments
 (0)