我想知道是否有numpy.where
(从布尔到指数)的反面,从指数到布尔;例如numpy.there
。
可能的实现可以使用scipy的稀疏矩阵:
from scipy.sparse import csr_matrix
numpy_there = lambda there, n: numpy.array(
csr_matrix((
[1]*len(there),
there,
[0, len(there)]
),
shape=(1,n),
dtype=numpy.bool
).todense())[0,:]
numpy_there([1,4,6,7,12], 15)
array([False, True, False, False, True, False, True, True, False, False, False, False, True, False, False], dtype=bool)
但显然,这需要scipy并且非常冗长,而给定numpy.where
我也期望numpy.there
。
答案 0 :(得分:3)
您可以np.in1d
与np.arange
一起使用来模拟此类行为,就像这样 -
def numpy_there(A,val):
return np.in1d(np.arange(val),A)
示例运行 -
In [14]: A
Out[14]: array([ 1, 4, 6, 7, 12])
In [15]: numpy_there(A,15)
Out[15]:
array([False, True, False, False, True, False, True, True, False,
False, False, False, True, False, False], dtype=bool)
您可以使用带有布尔False
值的初始化来使用更详细的实现,然后在True
索引位置分配A
值,如下所示 -
def numpy_there_v2(A,val):
out = np.zeros(val,dtype=bool)
out[A] = 1
return out