Source code for MEDiml.utils.batch_patients

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import numpy as np


[docs] def batch_patients(n_patient: int, n_batch: int) -> np.ndarray: """Replaces volume intensities outside the ROI with NaN. Args: n_patient (int): Number of patient. n_batch (int): Number of batch, usually less or equal to the cores number on your machine. Returns: ndarray: List of indexes with size n_batch and max value n_patient. """ # FIND THE NUMBER OF PATIENTS IN EACH BATCH patients = [0] * n_batch # np.zeros(n_batch, dtype=int) patient_vect = np.random.permutation(n_patient) # To randomize stuff a bit. if n_batch: n_p = n_patient / n_batch n_sup = np.ceil(n_p).astype(int) n_inf = np.floor(n_p).astype(int) if n_sup != n_inf: n_sub_inf = n_batch - 1 n_sub_sup = 1 total = n_sub_inf*n_inf + n_sub_sup*n_sup while total != n_patient: n_sub_inf = n_sub_inf - 1 n_sub_sup = n_sub_sup + 1 total = n_sub_inf*n_inf + n_sub_sup*n_sup n_p = np.hstack((np.tile(n_inf, (1, n_sub_inf))[ 0], np.tile(n_sup, (1, n_sub_sup))[0])) else: # The number of patients in all batches will be the same n_p = np.tile(n_sup, (1, n_batch))[0] start = 0 for i in range(0, n_batch): patients[i] = patient_vect[start:(start+n_p[i])].tolist() start += n_p[i] return patients