def read_dimensions(f, name=None, ix=slice(None), verbose=False): """ return an Axes object name, optional: variable name return: Axes object """ f, close = check_file(f, mode='r', verbose=verbose) # dimensions associated to the variable to load if name is None: dims = f.dimensions.keys() else: try: dims = f.variables[name].dimensions except KeyError: print "Available variable names:", f.variables.keys() raise dims = [str(d) for d in dims] # conversion to string # load axes axes = Axes() for k in dims: try: values = f.variables[k][ix] except KeyError: msg = "'{}' dimension not found, define integer range".format(k) warnings.warn(msg) values = np.arange(len(f.dimensions[k])) # replace unicode by str as a temporary bug fix (any string seems otherwise to be treated as unicode in netCDF4) if values.size > 0 and type(values[0]) is unicode: for i, val in enumerate(values): if type(val) is unicode: values[i] = str(val) axes.append(Axis(values, k)) if close: f.close() return axes
def read_dimensions(f, name=None, ix=slice(None), verbose=False): """ return an Axes object name, optional: variable name return: Axes object """ f, close = check_file(f, mode='r', verbose=verbose) # dimensions associated to the variable to load if name is None: dims = f.dimensions.keys() else: try: dims = f.variables[name].dimensions except KeyError: print "Available variable names:",f.variables.keys() raise dims = [str(d) for d in dims] # conversion to string # load axes axes = Axes() for k in dims: try: values = f.variables[k][ix] except KeyError: msg = "'{}' dimension not found, define integer range".format(k) warnings.warn(msg) values = np.arange(len(f.dimensions[k])) # replace unicode by str as a temporary bug fix (any string seems otherwise to be treated as unicode in netCDF4) if values.size > 0 and type(values[0]) is unicode: for i, val in enumerate(values): if type(val) is unicode: values[i] = str(val) axes.append(Axis(values, k)) if close: f.close() return axes
def read_dimensions(f, name=None, ix=slice(None), dimensions_mapping=None, verbose=False): """ return an Axes object Parameters ---------- name : str, optional variable name ix : integer (position) index dimensions_mapping : dict, optional mapping between dimension and variable names Returns ------- Axes object """ f, close = _check_file(f, mode='r', verbose=verbose) # dimensions associated to the variable to load if name is None: dims = f.dimensions.keys() else: try: dims = f.variables[name].dimensions except KeyError: print "Available variable names:",f.variables.keys() raise dims = [str(d) for d in dims] # conversion to string # load axes axes = Axes() for dim in dims: if dimensions_mapping is not None: # user-provided mapping between dimensions and variable name dim_name = dimensions_mapping[dim] values = f.variables[dim_name][ix] elif dim in f.variables.keys(): # assume that the variable and dimension have the same name values = f.variables[dim][ix] else: # default, dummy dimension axis msg = "'{}' dimension not found, define integer range".format(dim) warnings.warn(msg) values = np.arange(len(f.dimensions[dim])) # replace unicode by str as a temporary bug fix (any string seems otherwise to be treated as unicode in netCDF4) if values.size > 0 and type(values[0]) is unicode: for i, val in enumerate(values): if type(val) is unicode: values[i] = str(val) axis = Axis(values, dim) # add metadata if dim in f.variables.keys(): meta = _read_attributes(f, dim) axis._metadata(meta) axes.append(axis) if close: f.close() return axes