gpt4 book ai didi

python - Python 中一个数组出现在另一个数组中的次数

转载 作者:行者123 更新时间:2023-12-05 08:25:02 25 4
gpt4 key购买 nike

如何计算一个数组在更大数组中出现的次数?

a = np.array([1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1])
b = np.array([1, 1, 1])

b 在 a 中出现的次数应为 3

b可以是1和0的任意组合

我正在处理巨大的数组,所以 for 循环非常慢

最佳答案

如果要搜索的子数组全为1,则可以通过将两个数组与np.convolve进行卷积来计算该子数组在较大数组中出现的次数并计算结果中等于子数组大小的条目数:

# 'valid' = convolve only over the complete overlap of the signals
>>> np.convolve(a, b, mode='valid')
array([1, 1, 2, 3, 2, 2, 2, 3, 3, 2, 1, 1])
# ^ ^ ^ <= Matches

>>> win_size = min(a.size, b.size)
>>> np.count_nonzero(np.convolve(a, b) == win_size)
3

对于可能包含 0 的子数组,您可以首先使用卷积将 a 转换为包含由每个大小为 b.size 的窗口编码的二进制数的数组。然后只需将转换后的数组的每个元素与 b 编码的二进制数进行比较并计算匹配项:

>>> b = np.array([0, 1, 1])           # encodes '3'
>>> weights = 2 ** np.arange(b.size) # == [1, 2, 4, 8, ..., 2**(b.size-1)]

>>> np.convolve(a, weights, mode='valid')
array([4, 1, 3, 7, 6, 5, 3, 7, 7, 6, 4, 1])
# ^ ^ Matches

>>> target = (b * np.flip(weights)).sum() # target==3
>>> np.count_nonzero(np.convolve(a, weights, mode='valid') == target)
2

关于python - Python 中一个数组出现在另一个数组中的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69273815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com