Exemplo n.º 1
0
def _group(self, key):
    # adapted from `toolz` package.
    # see license in $PYTRAJHOME/licenses/externals/toolz.txt
    import collections
    # d = collections.defaultdict(lambda: self.__class__().append)
    d = collections.defaultdict(lambda: [].append)
    for item in self:
        d[key(item)](item)
    rv = {}
    for k, v in iteritems(d):
        rv[k] = v.__self__
    return rv
Exemplo n.º 2
0
 def __init__(self, dslist=None, copy=False):
     if dslist:
         if isinstance(dslist, dict):
             # {'x': [1, 3, 5], 'y': [4, 7, 8]}
             for key, values in iteritems(dslist):
                 self.append(DataArray({key: values}), copy=copy)
         else:
             for d0 in dslist:
                 # always make a copy
                 # from DataArray(d0)
                 # so we set copy=False here
                 # to avoid copying twice
                 self.append(DataArray(d0), copy=copy)
Exemplo n.º 3
0
def groupby(key, seq):
    # lightly adapted from `toolz` package.
    # see license in $PYTRAJHOME/licenses/externals/toolz.txt
    '''
    Examples
    --------
    >>> names = ['Alice', 'Bob', 'Charlie', 'Dan', 'Edith', 'Frank']
    >>> _ = groupby(len, names)
    '''
    d = defaultdict(lambda: seq.__class__().append)
    for item in seq:
        d[key(item)](item)
    rv = {}
    for k, v in iteritems(d):
        rv[k] = v.__self__
    return rv
Exemplo n.º 4
0
def groupby(key, seq):
    # lightly adapted from `toolz` package.
    # see license in $PYTRAJHOME/licenses/externals/toolz.txt
    '''
    Examples
    --------
    >>> names = ['Alice', 'Bob', 'Charlie', 'Dan', 'Edith', 'Frank']
    >>> groupby(len, names)
    {3: ['Bob', 'Dan'], 5: ['Alice', 'Edith', 'Frank'], 7: ['Charlie']}
    '''
    d = defaultdict(lambda: seq.__class__().append)
    for item in seq:
        d[key(item)](item)
    rv = {}
    for k, v in iteritems(d):
        rv[k] = v.__self__
    return rv
Exemplo n.º 5
0
def concat_dict(iterables):
    """concat dict

    Examples
    --------
    >>> dict_0 = {'x' : [1, 2, 3,]}
    >>> dict_1 = {'x' : [4, 5]}
    >>> concat_dict((dict_0, dict_1))
    OrderedDict([('x', array([1, 2, 3, 4, 5]))])
    """
    new_dict = OrderedDict()
    for i, d in enumerate(iterables):
        if i == 0:
            # make a copy of first dict
            new_dict.update(d)
        else:
            for k, v in iteritems(new_dict):
                new_dict[k] = np.concatenate((new_dict[k], d[k]))
    return new_dict
Exemplo n.º 6
0
def dict_to_ndarray(dict_of_array):
    """convert OrderedDict to numpy array

    Examples
    --------
    >>> import pytraj as pt
    >>> traj = pt.load_sample_data('tz2')
    >>> dslist = pt.multidihedral(traj, dhtypes='phi psi', resrange='2', dtype='dict')
    >>> list(dslist.keys())
    ['phi:2', 'psi:2']
    >>> dict_to_ndarray(dslist)
    array([[-128.72617304, -109.44321317, -130.93278259, ..., -146.70146067,
            -121.58263643, -112.74485175],
           [ 150.11249102,  142.52303293,  131.11609265, ...,  123.44883266,
             141.18992429,  120.03168126]])
    """
    if not isinstance(dict_of_array, OrderedDict):
        raise NotImplementedError("support only OrderedDict")
    from pytraj.externals.six import iteritems

    return np.array([v for _, v in iteritems(dict_of_array)])