Source code for hic3defdr.util.classification

import numpy as np
import scipy.sparse as sparse

from hic3defdr.util.clusters import find_clusters


[docs]def classify(row, col, value, clusters): """ Classifies pixels (specified by row, col coordinates) into classes (corresponding to the columns of value) where their value is highest, ignoring those pixels that don't belong to the specified clusters. Parameters ---------- row, col : np.ndarray Row and column indices, respectively, identifying pixels which correspond to rows of ``value``. value : np.ndarray Value to use to assign classes. Rows correspond to pixels, columns to conditions. clusters : list of set of tuple Only pixels in these clusters will be assigned classes. Returns ------- list of list of set of tuple The outer list represents classes (one per condition). Its elements represent clusters of points with that class/condition. """ # convert clusters to idx, parallel to row/col pixels = set().union(*(c for c in clusters)) idx = np.zeros_like(row, dtype=bool) for i, p in enumerate(zip(row, col)): if p in pixels: idx[i] = True # assign classes classes = np.argmax(value[idx, :], axis=1) # re-cluster each class n = max(row.max(), col.max()) + 1 class_clusters = [] for c in range(value.shape[1]): coo = sparse.coo_matrix( (np.ones((classes == c).sum()), (row[idx][classes == c], col[idx][classes == c])), shape=(n, n)) class_clusters.append(find_clusters(coo)) return class_clusters