如何使用显示True值索引的元组列表生成2D布尔数组?
例如,我有以下元组列表:
lst = [(0,1), (0, 2), (1, 0), (1, 3), (2,1)]
我要做的是,我首先生成一个False数组:
arr = np.repeat(False, 12).reshape(3, 4)
然后,遍历列表以分配True值:
for tup in lst: arr[tup] = True print(arr) array([[False, True, True, False], [ True, False, False, True], [False, True, False, False]], dtype=bool)
对我来说,这似乎是一个常见的用例,所以我想知道是否有一个内置方法,没有循环。
zip(*...)是“转置”列表(或元组)列表的便捷方法。与 A[x,y]相同A[(x,y)]。
zip(*...)
A[x,y]
A[(x,y)]
In [397]: lst = [(0,1), (0, 2), (1, 0), (1, 3), (2,1)] In [398]: tuple(zip(*lst)) # make a tuple of tuples (or lists) Out[398]: ((0, 0, 1, 1, 2), (1, 2, 0, 3, 1)) In [399]: A=np.zeros((3,4),dtype=bool) # make an array of False In [400]: A[tuple(zip(*lst))] = True # assign True to the 5 values In [401]: A Out[401]: array([[False, True, True, False], [ True, False, False, True], [False, True, False, False]], dtype=bool)