有没有numpy.there?

时间:2015-10-27 12:20:53

标签: python-3.x numpy scipy

我想知道是否有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

1 个答案:

答案 0 :(得分:3)

您可以np.in1dnp.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