I have an enormous 1D numpy array of booleans w
and an increasing list of indices i
, which splits w
into len(i)+1
subarrays. A toy example is:
w=numpy.array([True,False,False,False,True,True,True,True,False,False])
i=numpy.array([0,0,2,5,5,8,8])
I wish to compute a numpy array wi
, whose i
-th entry is 1 if the i
-th subarray contains a True
and 0 otherwise. In other words, the i
-th entry of w
is the sum (logical 'or') of elements of the i
-th subarray of w
. In our example, the output is:
[0 0 1 1 0 1 0 0]
This is achieved with the code:
wi=numpy.fromiter(map(numpy.any,numpy.split(w,i)),int)
Is there a more efficient way of doing this or is this optimal as far as memory is concerned?
P.S. related post