Source code for pyifdm.helpers

# Copyright (c) 2022 Jakub Więckowski

import numpy as np

__all__ = [
    'rank',
    'generate_ifs_matrix'
]


[docs] def rank(x, descending=True): """ Calculates ranking of given values with the given direction, default descending order Parameters ---------- x: ndarray Array with values descending: boolean, default=True Switch to change ranking order Returns ------- ndarray Ranking with given order """ s = [sorted(x, reverse=descending).index(r)+1 for r in x] return np.array([(ss * s.count(ss) + s.count(ss) - 1) / s.count(ss) if s.count(ss) <= 2 else np.sum(list(range(ss, ss+s.count(ss)))) / s.count(ss) for ss in s])
[docs] def generate_ifs_matrix(m, n): """ Generates random Intuitionistic Fuzzy matrix with m alternatives and n criteria Parameters ---------- m: int Number of alternatives n: int Number of criteria Returns ------- ndarray Matrix with random IFSs """ arr = [] while len(arr) < m*n: t = np.random.random((2, 1)) if np.sum(t) <= 1: arr.append(t) return np.array(arr, dtype=object).reshape((m, n, 2)).astype(float)