How can I implement matlabs ``ismember()`` command in Python?

后端 未结 6 2308
星月不相逢
星月不相逢 2020-12-19 22:59

here is my problem: I would like to create a boolean matrix B that contains True everywhere that matrix A has a value contained in vector v. One inconvenient so

6条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-12-19 23:15

    Here's a naive one-liner:

    [any (value in item for value in v) for item in A]
    

    Sample output:

    >>> A = ( [0,1,2], [1,2,3], [2,3,4] )
    >>> v = [1,2]
    >>> [any (value in item for value in v) for item in A]
    [True, True, True]
    >>> v = [1]
    >>> [any (value in item for value in v) for item in A]
    [True, True, False]
    

    It's a very Pythonic approach, but I'm certain it won't scale well on large arrays or vectors because Python's in operator is a linear search (on lists/tuples, at least).

    As Brooks Moses pointed out in the below comment, the output should be a 3x3 matrix. That's why you give sample output in your questions. (Thanks Brooks)

    >>> v=[1,2]
    >>> [ [item in v for item in row] for row in A]
    [[False, True, True], [True, True, False], [True, False, False]]
    >>> v=[1]
    >>> [ [item in v for item in row] for row in A]
    [[False, True, False], [True, False, False], [False, False, False]]
    

提交回复
热议问题