首页 > 解决方案 > 如何创建一个值基于索引数组的布尔数组?

问题描述

假设我有一个 numpy 数组A,如下所示:

A = 
array([[0, 2],
       [1, 2],
       [0, 1]])

B我使用np.zeros如下创建了一个布尔数组

B = 
array([[False, False, False],
       [False, False, False],
       [False, False, False]])

现在,我想创建一个数组C,它根据 的列索引给出 True 值A

所以,

C = 
array([[True, False, True],
       [False, True, True],
       [True, True, False]])

标签: pythonnumpy

解决方案


您可以使用一些 Numpy 相对先进的索引技术来做到这一点:

In [27]: B[np.arange(A.shape[0])[:,None], A] = True                                                                                                                                                  

In [28]: B                                                                                                                                                                                                  
Out[28]: 
array([[ True, False,  True],
       [False,  True,  True],
       [ True,  True, False]])

创建以下np.arange(A.shape[0])[:,None]数组

array([[0],
       [1],
       [2]])

用作B数组第一个轴的索引。这里[:,None]用于将一维range对象转换为二维数组,以匹配二维的第二个轴索引(A数组)。


推荐阅读