Cómo comprobar si un tensor pequeño está dentro de un tensor grande

a = torch.tensor([[1,1],[2,2]])

Quiero saber si tensor([1,1]) está dentro de un (volver un bool)

a.eq(torch.tensor([1,1]))
tensor([[ True, True],
[False, False]])

– título que debe devolver un Verdadero a mi caso.

a.eq(torch.tensor([1,2]))
tensor([[ True, False],
[False, True]])

– título que debe devolver un falso a mi caso. ¿Alguna sugerencia?

Pregunta hecha hace 3 años, 4 meses, 28 días - Por codecrusader


4 Respuestas:

  • Podrías convertirlo en una lista y luego comprobarlo a través de in operador:

    p = torch.arange(1, 5).reshape((2,2))
    k = torch.tensor([1,2])
    v = torch.tensor([1,3])
    
    >> k.tolist() in p.tolist()
    
    True
    
    >> v.tolist() in p.tolist()
    
    False
    

    O si quieres hacerlo a través de torch sólo

    torch.count_nonzero(k==p, 1) == len(k)
    
    

    Respondida el Dec 18, 2020 a las 14:00 - por quantumcoder403a

    Votos positivos: 0 | Votos negativos: 0

  • Puedes usar torch.BoolTensor.all y torch.BoolTensor.any

    a = torch.tensor([[1,1],[2,2]])
    b = torch.tensor([1,1])
    c = torch.tensor([1,2])
    
    a.eq(b).all(dim=1).any()
    tensor(True)
    
    a.eq(c).all(dim=1).any()
    tensor(False)
    

    Respondida el Dec 18, 2020 a las 14:08 - por pixelpioneer

    Votos positivos: 0 | Votos negativos: 0

  • La función eq en PyTorch realiza una comparación elemento por elemento entre los dos tensores y devuelve un tensor con valores booleanos que indican si los elementos son iguales o no. Sin embargo, esta no es la forma más adecuada para verificar si un tensor pequeño está dentro de un tensor grande.

    Una forma más directa de verificar si un tensor pequeño está dentro de un tensor grande es utilizando el método numpy.all y convirtiendo ambos tensores a matrices numpy. Por ejemplo:

    python
    import torch
    import numpy as np
    
    a = torch.tensor([[1, 1], [2, 2]])
    small_tensor = torch.tensor([1, 1])
    
    

    Convertir tensores a numpy arrays y verificar si el tensor pequeño está contenido en el tensor grande

    isContained = np.all(a.numpy() == small_tensor.numpy()) print(isContained)

    Devuelve True si el tensor pequeño está contenido en el tensor grande, False de lo contrario

    En este código, convertimos los tensores a matrices numpy y utilizamos np.all para verificar si todos los elementos del tensor pequeño están presentes en el tensor grande. Espero que esta sugerencia te sea útil.

    Respondida el Dec 19, 2020 a las 14:01 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Puedes utilizar el método torch.any() para comprobar si algún elemento del tensor pequeño está contenido en el tensor grande. Aquí tienes un ejemplo:

    python
    a = torch.tensor([[1,1],[2,2]])
    b = torch.tensor([1,1])
    
    result = torch.any(torch.eq(a, b))
    
    print(result)
    

    True

    En este ejemplo, torch.eq(a, b) devuelve un tensor de valores booleanos que indican si cada elemento correspondiente de a y b son iguales. El método torch.any() se aplica a este tensor y devuelve True porque al menos un elemento es True.

    También puedes utilizar el método torch.isin() para comprobar si un tensor pequeño está contenido en un tensor grande. Aquí tienes un ejemplo:

    python
    a = torch.tensor([[1,1],[2,2]])
    b = torch.tensor([1,1])
    
    result = torch.isin(b, a)
    
    print(result)
    

    tensor([ True, False])

    En este ejemplo, torch.isin(b, a) devuelve un tensor de valores booleanos que indican si cada elemento de b está contenido en a. Como 1 está contenido en a pero 2 no, el resultado es [True, False].

    Respondida el Dec 19, 2020 a las 14:03 - por Gemini

    Votos positivos: 0 | Votos negativos: 0