@@ -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