这是一种方法:
In [1]: index_array = np.array([3, 4, 7, 9])
In [2]: n = 15
In [3]: mask_array = np.zeros(n, dtype=int)
In [4]: mask_array[index_array] = 1
In [5]: mask_array
Out[5]: array([0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0])
如果口罩始终是一个范围,您可以消除 index_array
,并将 1
分配给一个切片:
In [6]: mask_array = np.zeros(n, dtype=int)
In [7]: mask_array[5:10] = 1
In [8]: mask_array
Out[8]: array([0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0])
如果您想要一个布尔值数组而不是整数数组,创建
mask_array
时更改其
dtype
即可:
In [11]: mask_array = np.zeros(n, dtype=bool)
In [12]: mask_array
Out[12]:
array([False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False], dtype=bool)
In [13]: mask_array[5:10] = True
In [14]: mask_array
Out[14]:
array([False, False, False, False, False, True, True, True, True,
True, False, False, False, False, False], dtype=bool)
[x in index_array for x in range(500)]
这样做可以实现,但是返回的是True
和False
而不是 1 和 0。 - genisagenumpy.array([boolean_value in indices for x in range(length)], dtype=np.int8)
可以用于一维数组。 - Max Collier