def selection(self, index_list): """ Method to select samples based on an index list :param index_list: :return: Samples object """ if type(index_list).__name__ in ('list', 'tuple', 'NoneType'): index_list = np.array(Opt.__copy__(index_list)) samp = Samples() samp.x_name = self.x_name samp.y_name = self.y_name samp.x = self.x[index_list, :] samp.y = self.y[index_list] samp.nsamp = self.x.shape[0] samp.nfeat = self.x.shape[1] samp.index = np.arange(0, samp.nsamp) samp.xmin = self.x.min(0, initial=-self.max_allow_x) samp.xmax = self.x.max(0, initial=self.max_allow_x) samp.ymin = self.y.min(initial=-self.max_allow_y) samp.ymax = self.y.max(initial=self.max_allow_y) return samp
def polygon_bound_grid(coords_list, div=10, intersect_check=False): """ Method to get square grid intersecting a polygon This function only accepts a list of coordinates: [[x1,y1],[x2,y2],...] :param coords_list: list of coordinates: [[x1,y1],[x2,y2],...] :param div: Number of divisions along x or y (default: 10) :param intersect_check: If only the intersecting coordinates should be returned :return: List of list of coordinates (square) """ temp_coords_list = Opt.__copy__(coords_list) if temp_coords_list[-1][0] != temp_coords_list[0][ 0] or temp_coords_list[-1][1] != temp_coords_list[0][1]: temp_coords_list.append(temp_coords_list[0]) bounds_wkt = Vector.wkt_from_coords(temp_coords_list, geom_type='polygon') bounds_geom = Vector.get_osgeo_geom(bounds_wkt) bounds_maxx = max(list(coord[0] for coord in temp_coords_list)) bounds_minx = min(list(coord[0] for coord in temp_coords_list)) bounds_maxy = max(list(coord[1] for coord in temp_coords_list)) bounds_miny = min(list(coord[1] for coord in temp_coords_list)) xcoords = Sublist.frange(bounds_minx, bounds_maxx, div=div) ycoords = Sublist.frange(bounds_miny, bounds_maxy, div=div).reverse() geom_list = list() for i in range(len(xcoords) - 1): for j in range(len(ycoords) - 1): geom_list.append([[xcoords[i], ycoords[j]], [xcoords[i + 1], ycoords[j]], [xcoords[i + 1], ycoords[j + 1]], [xcoords[i], ycoords[j + 1]], [xcoords[i], ycoords[j]]]) if intersect_check: wkt_list = list( Vector.wkt_from_coords(geom_coords, geom_type='polygon') for geom_coords in geom_list) index = list() for i, geom_wkt in enumerate(wkt_list): temp_geom = Vector.get_osgeo_geom(geom_wkt) if temp_geom.Intersects(bounds_geom): index.append(i) return list(geom_list[i] for i in index) else: return geom_list
def format_data(self): """ Method to format the samples to the RF model fit method :param self :return: dictionary of features and labels """ if self.columns is not None: column_list = [] column_list += self.columns.tolist() out_x = self.x[:, self.columns] out_x_name = list(self.x_name[i] for i in column_list) else: out_x = self.x out_x_name = self.x_name return { 'features': out_x.copy(), 'labels': self.y.copy(), 'label_name': Opt.__copy__(self.y_name), 'feature_names': Opt.__copy__(out_x_name), }