Получение данных из матрицы сравнения в python - PullRequest
1 голос
/ 08 февраля 2012

У меня есть функция, которая возвращает матрицу сравнения из заданного списка:

def compare(a, b):
    if b > a:
        return 1
    elif b < a:
        return -1
    else:
        return 0

def matrix(data):
    return [[compare(a, b) for b in data] for a in data]

Я использую эту функцию следующим образом:

>>> matrix([0, 4, 5, 2, 1, 3])
[[0, 1, 1, 1, 1, 1],
 [-1, 0, 1, -1, -1, -1],
 [-1, -1, 0, -1, -1, -1],
 [-1, 1, 1, 0, -1, 1],
 [-1, 1, 1, 1, 0, 1],
 [-1, 1, 1, -1, -1, 0]]

Мне нужна функция для возврата данныхиз данной матрицы, как код ниже, но я не знаю, как это сделать.

>>> data_from_matrix([[0, 1, 1, 1, 1, 1],
                      [-1, 0, 1, -1, -1, -1],
                      [-1, -1, 0, -1, -1, -1],
                      [-1, 1, 1, 0, -1, 1],
                      [-1, 1, 1, 1, 0, 1],
                      [-1, 1, 1, -1, -1, 0]])
[0, 4, 5, 2, 1, 3]

1 Ответ

3 голосов
/ 08 февраля 2012

Простым хаком будет вычисление сумм по каждой строке матрицы:

def data_from_matrix(m):
    return [(len(m) - 1 - sum(row)) // 2 for row in m]

Это предполагает, что матрица фактически определяет общий порядок и не проверяет согласованность матрицы. Другое предположение состоит в том, что набор, в котором предполагается определить общий порядок, равен range(len(m)).

Пример:

>>> data_from_matrix([[ 0,  1,  1,  1,  1,  1],
...                   [-1,  0,  1, -1, -1, -1],
...                   [-1, -1,  0, -1, -1, -1],
...                   [-1,  1,  1,  0, -1,  1],
...                   [-1,  1,  1,  1,  0,  1],
...                   [-1,  1,  1, -1, -1,  0]])
[0, 4, 5, 2, 1, 3]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...