Вхождение вектора в матрицу

Пусть есть матрица и вектор

X = np.array(
    [
     [1, 20, 0.3],
     [10, 11, 12],
     [32, 5, -6],
     [7, 8, 9],
    ]
)

y = np.array([7, 8, 9])

Каким образом я могу проверить, является ли вектор y строкой матрицы X. (Именно строкой)

Примеры:

y = np.array([7, 8, 9]) # True
y = np.array([7, 9, 8]) # False
y = np.array([7, 8, 10]) # False
y = np.array([20, 11, 5, 8]) # False
y = np.array([10, 11, 12]) # True

Рассчитывал на in, но он ведёт себя не так, как я хочу.

Всем спасибо.


Ответы (2 шт):

Автор решения: strawdog

Можно попробовать сделать так:

Исходные данные:

import numpy as np

X = np.array(
    [
     [1, 20, 0.3],
     [10, 11, 12],
     [32, 5, -6],
     [7, 8, 9],
    ]
)

код:

def cmp_subarray(X, y)-> bool:
    if y.shape[0] == X.shape[1]:
        return (np.allclose(*X[np.where((X == y).any(1))], y))
    else:
        return False

проверяем:

print(cmp_subarray(X, np.array([7, 8, 9]))) #True
print(cmp_subarray(X, np.array([7, 9, 8]))) #False
print(cmp_subarray(X, np.array([7, 8, 10]))) #False
print(cmp_subarray(X, np.array([20, 11, 5, 8]))) #False
print(cmp_subarray(X, np.array([10, 11, 12]))) #True
→ Ссылка
Автор решения: MaxU

можно вычесть вектор y из матрицы X и сравнить результат с нулевым вектором - если все значения в строке результирующей матрицы стремятся к нулю, значит мы нашли совпадение. Дальше проверяем встретилось ли хотя бы одно совпадение:

res = np.isclose(X - y, np.zeros(y.shape)).all(axis=1).any()

результат:

In [52]: res
Out[52]: True
→ Ссылка