Вхождение вектора в матрицу
Пусть есть матрица и вектор
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