mirror of
https://github.com/chanzuckerberg/cellxgene.git
synced 2026-09-19 02:48:30 +08:00
38 lines
970 B
Python
38 lines
970 B
Python
import numpy as np
|
|
|
|
|
|
def pack_selector_from_mask(boolarray):
|
|
"""
|
|
pack all contiguous selectors into slices. Remember that
|
|
tiledb multi_index requires INCLUSIVE indices.
|
|
"""
|
|
|
|
if boolarray is None:
|
|
return slice(None)
|
|
|
|
assert type(boolarray) == np.ndarray
|
|
assert boolarray.dtype == bool
|
|
|
|
selector = np.nonzero(boolarray)[0]
|
|
return pack_selector_from_indices(selector)
|
|
|
|
|
|
def pack_selector_from_indices(selector):
|
|
|
|
if len(selector) == 0:
|
|
return None
|
|
|
|
result = []
|
|
current = slice(selector[0], selector[0])
|
|
for sel in selector[1:]:
|
|
if sel == current.stop + 1:
|
|
current = slice(current.start, sel)
|
|
else:
|
|
result.append(current if current.start != current.stop else current.start)
|
|
current = slice(sel, sel)
|
|
|
|
if len(result) == 0 or result[-1] != current:
|
|
result.append(current if current.start != current.stop else current.start)
|
|
|
|
return result
|