从列表中找到矩阵中的字符串元素

时间:2019-12-15 23:46:47

标签: python arrays numpy matrix

我想搜索我在n x n矩阵中具有的字符串值,以查看它们是否存在于列表中。输出应该是一个n x n矩阵,布尔值为True或False,这取决于是否找到字符串。矩阵和列表如下所示:

matrix = [['aa', 'ba', 'ca'], ['ab', 'bb', 'cb'], ['ac', 'bc', 'cc']]
list = ['ba','cb','dg'] 

我有此代码:

matrixFound = [[for x in matrix] for y in matrix]

并且我需要以某种方式在元素中包含此语句:

matrix in list

输出应该是这样的矩阵:

[[False,True,False],[False,False,True],[False,False,False]]

我当时正在考虑使用map或lambda解决此问题,但无法正确进行编码。 应该怎么做?可以使用常规的python或numpy。

3 个答案:

答案 0 :(得分:2)

您可以使用numpy的isin:

np.isin(matrix,list2)                                                                                                                                                               

# array([[False,  True, False],
#       [False, False,  True],
#       [False, False, False]])

答案 1 :(得分:1)

使用numpy绝对是微不足道的:

In [1]: import numpy

In [2]: matrix = numpy.array([['aa', 'ba', 'ca'], ['ab', 'bb', 'cb'], ['ac', 'bc', 'cc']])

In [3]: matrix == 'cb'
Out[3]:
array([[False, False, False],
       [False, False,  True],
       [False, False, False]], dtype=bool)

In [4]: search = ['ba','cb','dg']

In [5]: result = numpy.zeros(matrix.shape, dtype='bool')

In [6]: result
Out[6]:
array([[False, False, False],
       [False, False, False],
       [False, False, False]], dtype=bool)

In [7]: for s in search:
   ...:     result |= matrix == s
   ...:

In [8]: result
Out[8]:
array([[False,  True, False],
       [False, False,  True],
       [False, False, False]], dtype=bool)

答案 2 :(得分:1)

如果要使用列表理解,这是您要查找的代码。
matrixFound = [[x in list for x in y] for y in matrix]
它模拟嵌套循环,其中外部理解会从matrix中选择一列,而内部理解会检查元素是否在list