8000 align sessions · Issue #501 · larray-project/larray · GitHub
[go: up one dir, main page]

Skip to content
align sessions #501
Open
Open
@gdementen

Description

@gdementen

Here is some preliminary code:

from larray.util.misc import unique_list


def align(*sessions, join='outer', fill_value=nan):
    # TODO: support n sessions
    assert len(sessions) == 2
    if not all(isinstance(s, Session) for s in sessions):
        raise TypeError("Session.align only supports aligning with other Session objects")

    seen = set()
    all_keys = []
    for s in sessions:
        unique_list(s.keys(), all_keys, seen)

    res1, res2 = [], []
    for name in all_keys:
        arrays = [s.get(name, np.nan) for s in sessions]
        arrays = [aslarray(a) for a in arrays]
        # rename anonymous axes because those are not supported by align()
        arrays = [array.rename({axis_num: axis.name if axis.name is not None else 'axis{}'.format(axis_num)
                                for axis_num, axis in enumerate(array.axes)})
                  for array in arrays]
        assert len(arrays) == 2
        arr1, arr2 = arrays
        try:
            # TODO: align should support more than one "other" array
            aligned1, aligned2 = arr1.align(arr2, join=join, fill_value=fill_value)
        except Exception:
            aligned1, aligned2 = np.nan, np.nan
        res1.append((name, aligned1))
        res2.append((name, aligned2))
    return Session(res1), Session(res2)


session1, session2 = align(session1, session2)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      0