Example #1
0
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
Example #2
0
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
Example #3
0
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