Как я могу сравнить две матрицы на сходство, используя Python? - PullRequest
0 голосов
/ 28 мая 2020

Python 3: Как я могу сравнить две матрицы одинаковой формы друг с другом?

Например, допустим, у нас есть матрица x:

1 0 1
0 0 1 
1 1 0

Я хотел бы сравните это с матрицей y:

1 0 1
0 0 1
1 1 1

Что даст мне оценку, например, 8/9, поскольку 8/9 элементов были одинаковыми, за исключением последнего di git, которое изменился с 0 на 1. Матрицы, с которыми я имею дело, намного больше, но их размеры согласованы для сравнения.

Должна быть какая-то библиотека, которая может это сделать. Есть мысли?

Ответы [ 4 ]

0 голосов
/ 28 мая 2020

Если вы используете numpy, вы можете просто использовать np.mean() в логическом массиве после сравнения следующим образом.

import numpy as np

m1 = np.array([
    [1, 0, 1],
    [0, 0, 1], 
    [1, 1, 0],
])

m2 = np.array([
    [1, 0, 1],
    [0, 0, 1],
    [1, 1, 1],
])

score = np.mean(m1 == m2)
print(score) # prints 0.888..
0 голосов
/ 28 мая 2020

Если ваши матрицы представлены с использованием сторонней библиотеки Numpy (которая предоставляет много других полезных вещей для работы с матрицами, а также любые типы прямоугольников angular, мульти- размерный массив):

>>> import numpy as np
>>> x = np.array([[1,0,1],[0,0,1],[1,1,0]])
>>> y = np.array([[1,0,1],[0,0,1],[1,1,1]])

Тогда найти количество соответствующих одинаковых элементов так же просто, как:

>>> (x == y).sum() / x.size
0.8888888888888888

Это работает, потому что x == y "транслирует" сравнение для каждого соответствующего элемента пара:

>>> x == y
array([[ True,  True,  True],
       [ True,  True,  True],
       [ True,  True, False]])

, а затем складываем логические значения (преобразованные в целое число, True имеет значение 1, а False имеет значение 0) и делим на общее количество элементов .

0 голосов
/ 28 мая 2020

Если вы используете NumPy, вы можете сравнить их и получить следующий результат:

import numpy as np
a = np.array([[1,0,1],[0,0,1],[1,1,0]])
b = np.array([[1,0,1],[0,0,1],[1,1,1]])

print(a == b)
Out: matrix([[ True,  True,  True],
             [ True, True,  True],
             [ True,  True,  False]],

Чтобы подсчитать совпадения, вы можете изменить форму матриц на list и подсчитать совпадающие значения:

import numpy as np
a = np.array([[1,0,1],[0,0,1],[1,1,0]])
b = np.array([[1,0,1],[0,0,1],[1,1,1]])

res = list(np.array(a==b).reshape(-1,))
print(f'{res.count(True)}/{len(res)}')

Out: 8/9
0 голосов
/ 28 мая 2020

Это легко сделать с массивами numpy.

import numpy as np

a = np.array([
    [1, 0, 1],
    [0, 0, 1], 
    [1, 1, 0],
])

b = np.array([
    [1, 0, 1],
    [0, 0, 1],
    [1, 1, 1],
])

print(np.sum(a == b) / a.size)

Возвращает 0,889.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...