Source code for PyBMF.utils.generator_utils

import numpy as np
from .common import get_rng


[docs] def shuffle_by_dim(X, dim, seed=None, rng=None): '''Shuffle a matrix by dimension dim: 0, shuffle by rows 1, shuffle by columns same as: np.take(X, idx, axis=dim, out=X) ''' rng = get_rng(seed, rng) idx = rng.rand(X.shape[dim]).argsort() X = X[idx, :] if dim == 0 else X[:, idx] return idx, X, rng
[docs] def shuffle_matrix(X, seed=None, rng=None): '''Shuffle a matrix ''' rng = get_rng(seed, rng) U_idx, X, rng = shuffle_by_dim(X=X, dim=0, rng=rng) V_idx, X, rng = shuffle_by_dim(X=X, dim=0, rng=rng) return U_idx, V_idx, X, rng
[docs] def add_noise(X, noise, seed=None, rng=None): '''Add noise to a matrix. Parameters ---------- X : ndarray, spmatrix noise : list of 2 float in [0, 1] Probabilities for false negative (p_pos) and false positive (p_neg). seed : optional Random seed. rng : optional Random number generator. ''' rng = get_rng(seed, rng) p_pos, p_neg = noise n = rng.binomial(size=X.shape, n=1, p=p_pos) X = np.maximum(X - n, 0) n = rng.binomial(size=X.shape, n=1, p=p_neg) X = np.minimum(X + n, 1) return X, rng
[docs] def reverse_index(idx): '''Reverse index Example ------- idx = np.array([0, 1, 2, 4, 5, 3]) inv = reverse_index(idx) # inv = [0, 1, 2, 5, 3, 4] ''' inv = [np.where(idx==i)[0][0] for i in range(len(idx))] return inv