Issue
How can I count the number of times an array is present in a larger array?
a = np.array([1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1])
b = np.array([1, 1, 1])
The count for the number of times b is present in a should be 3
b can be any combination of 1s and 0s
I'm working with huge arrays, so for loops are pretty slow
Solution
Not a super fast method, but you can view a
as a windowed array using np.lib.stride_tricks.sliding_window_view
:
window = np.lib.stride_tricks.sliding_window_view(a, b.shape)
You can now equate this to b
directly and find where they match:
result = (window == b).all(-1).sum()
For older versions of numpy (pre-1.20.0), you can use np.libs.stride_tricks.as_strided
to achieve a similar result:
window = np.lib.stride_tricks.as_strided(
a, shape=(*(np.array(a.shape) - b.shape + 1), *b.shape),
strides=a.strides + (a.strides[0],) * b.ndim)
Answered By - Mad Physicist
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.