用其他数组给定的索引屏蔽一个数组
Mask an array by the index given from other array
我有以下数组:
a = [10, 31, 30, 11, 17, 12, 22, 25, 85, 17, 21, 43]
b = [0, 1, 4, 6]
我想根据数组 b
给出的索引屏蔽 a
。这意味着得到:
c = [True, True, False, False, True, False, True, False, False, False, False, False]
res = [False] * len(a)
for idx in b:
res[idx] = True
或
[idx in b for idx in range(len(a))]
在使用 np.arange
创建的新数组上使用 np.in1d
,长度为 a
:
>>> a = [10, 31, 30, 11, 17, 12, 22, 25, 85, 17, 21, 43]
>>> b = [0, 1, 4, 6]
>>> a = np.array(a)
>>> b = np.array(b)
>>> np.in1d(np.arange(len(a)), b)
array([ True, True, False, False, True, False, True, False, False,
False, False, False], dtype=bool)
会是这样的:
c = []
for i, v in enumerate(a):
mask = True if i in b else False
c.append(mask)
In [524]: a=np.array([10, 31, 30, 11, 17, 12, 22, 25, 85, 17, 21, 43])
In [525]: b=np.array([0, 1, 4, 6])
要使 c
在 b
索引处为真,只需使用:
In [526]: c=np.zeros(a.shape, bool)
In [527]: c[b]=True
In [528]: c
Out[528]:
array([ True, True, False, False, True, False, True, False, False,
False, False, False], dtype=bool)
然后您可以 select a
的值:
In [529]: a[c]
Out[529]: array([10, 31, 17, 22])
但你也可以 select 他们 b
:
In [530]: a[b]
Out[530]: array([10, 31, 17, 22])
但是 c
更适合删除那些 a[~c]
。 np.delete(a,b)
做同样的事情。
生成c
的其他数组方法是
np.in1d(np.arange(a.shape[0]),b)
np.any(np.arange(a.shape[0])==b[:,None],0)
因为我只是在另一个问题中讨论掩码数组,所以我可以在这里做同样的事情:
In [542]: np.ma.MaskedArray(a,c)
Out[542]:
masked_array(data = [-- -- 30 11 -- 12 -- 25 85 17 21 43],
mask = [ True True False False True False True False False False False False],
fill_value = 999999)
我有以下数组:
a = [10, 31, 30, 11, 17, 12, 22, 25, 85, 17, 21, 43]
b = [0, 1, 4, 6]
我想根据数组 b
给出的索引屏蔽 a
。这意味着得到:
c = [True, True, False, False, True, False, True, False, False, False, False, False]
res = [False] * len(a)
for idx in b:
res[idx] = True
或
[idx in b for idx in range(len(a))]
在使用 np.arange
创建的新数组上使用 np.in1d
,长度为 a
:
>>> a = [10, 31, 30, 11, 17, 12, 22, 25, 85, 17, 21, 43]
>>> b = [0, 1, 4, 6]
>>> a = np.array(a)
>>> b = np.array(b)
>>> np.in1d(np.arange(len(a)), b)
array([ True, True, False, False, True, False, True, False, False,
False, False, False], dtype=bool)
会是这样的:
c = []
for i, v in enumerate(a):
mask = True if i in b else False
c.append(mask)
In [524]: a=np.array([10, 31, 30, 11, 17, 12, 22, 25, 85, 17, 21, 43])
In [525]: b=np.array([0, 1, 4, 6])
要使 c
在 b
索引处为真,只需使用:
In [526]: c=np.zeros(a.shape, bool)
In [527]: c[b]=True
In [528]: c
Out[528]:
array([ True, True, False, False, True, False, True, False, False,
False, False, False], dtype=bool)
然后您可以 select a
的值:
In [529]: a[c]
Out[529]: array([10, 31, 17, 22])
但你也可以 select 他们 b
:
In [530]: a[b]
Out[530]: array([10, 31, 17, 22])
但是 c
更适合删除那些 a[~c]
。 np.delete(a,b)
做同样的事情。
生成c
的其他数组方法是
np.in1d(np.arange(a.shape[0]),b)
np.any(np.arange(a.shape[0])==b[:,None],0)
因为我只是在另一个问题中讨论掩码数组,所以我可以在这里做同样的事情:
In [542]: np.ma.MaskedArray(a,c)
Out[542]:
masked_array(data = [-- -- 30 11 -- 12 -- 25 85 17 21 43],
mask = [ True True False False True False True False False False False False],
fill_value = 999999)