(Numpy)索引列表转布尔数组

5

输入:

  1. 数组长度(整数)
  2. 索引(集合或列表)

输出:

一个布尔型的numpy数组,对于给定的索引位置为1,其他位置为0。


示例:

输入:array_length=10, indexes={2,5,6}

输出:

[0,0,1,0,0,1,1,0,0,0]

这是我简单的实现方式:
def indexes2booleanvec(size, indexes):
    v = numpy.zeros(size)
    for index in indexes:
        v[index] = 1.0
    return v

有更加优雅的方法来实现这个吗?
2个回答

12

有一种方法是避免使用循环

In [7]: fill = np.zeros(array_length)     #  array_length = 10

In [8]: fill[indexes] = 1                 #  indexes = [2,5,6]

In [9]: fill
Out[9]: array([ 0.,  0.,  1.,  0.,  0.,  1.,  1.,  0.,  0.,  0.])

0

另一种方法(一行代码实现):

np.isin(np.arange(array_length), indexes)

但是这比Zero的解决方案慢。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接