cómo encontrar índices de una matriz numérica 2d que se produce en otra matriz 2d [duplicado]
Nov 25 2020
Tengo dos matrices numpy 2d y quiero encontrar dónde está ocurriendo una matriz en otra:
big_array = np.array([[1., 2., 1.2], [5., 3., 0.12], [-1., 14., 0.], [-9., 0., 13.]])
small_array= np.array([[5., 3., 0.12], [-9., 0., 13.]])
Luego quiero obtener los índices de las filas big_arrayque son iguales a las filas de small_array. Quiero hacer algo como np.in1dpara matrices 2d. Quiero decir, quiero tener:
result= [1, 3]
Ya probé el siguiente código pero no fue exitoso:
result=[([any(i == big_array ) for i in small_array])]
De antemano, agradezco cualquier ayuda.
Respuestas
1 Djib2011 Nov 25 2020 at 08:56
Lo que quieres es:
sum([row in small_array for row in big_array])
Ejemplo:
import numpy as np
big_array = np.array([[1., 2., 1.2], [5., 3., 0.12], [-1., 14., 0.], [-9., 0., 13.]])
small_array= np.array([[5., 3., 0.12], [-1., 14., 0.]])
result = sum([row in small_array for row in big_array])
print(result)
2
Editar (después de aclaraciones):
Una solución pitónica:
[i for i, brow in enumerate(big_array) for srow in small_array if all(srow == brow)]
Ejemplo:
big_array = np.array([[1., 2., 1.2], [5., 3., 0.12], [-1., 14., 0.], [-9., 0., 13.]])
small_array= np.array([[5., 3., 0.12], [-1., 14., 0.]])
result = [i for i, brow in enumerate(big_array) for srow in small_array if all(srow == brow)]
print(result)
[1, 2]
Nota : probablemente podría hacer algo mejor con np.where, si tiene matrices enormes, debería buscarlo