统计二进制矩阵中特定条件下连续0的出现频率
没问题,我来帮你搞定这个二进制矩阵的统计任务!先把需求再明确一遍,省得理解错:我们要统计每行里那些最后一个0后面紧跟着1的连续0块的长度频率,最后再把所有行里相同长度的频率加起来。
问题拆解与实现方案
核心规则明确
首先得搞清楚哪些连续0块是我们要统计的:
- 只有当某个连续0块的最后一个0的下一个元素是1时,这个0块的长度才需要被记录
- 行末尾的连续0块(后面没有元素或者是0),因为没有紧跟1,所以不算在内
举两个你给的例子:
例子1:行元素为
[0,1,0,1,0,0]
符合条件的是前两个单独的0(每个后面都紧跟1),最后两个0在末尾,不算。所以行内统计:连续0长度1,频率2
例子2:行元素为
[0,1,0,0,1,0,0,0,1]
三个连续0块后面都紧跟1,长度分别是1、2、3,每个的频率都是1
具体实现思路(Python示例)
下面用Python写一个可复用的函数,逻辑清晰,注释也给你写清楚了:
def count_target_zero_sequences(matrix): # 用字典存全局的频率统计,键是连续0的长度,值是累计频率 global_frequency = {} for row in matrix: current_zero_length = 0 # 遍历当前行的每个元素 for idx, num in enumerate(row): if num == 0: # 遇到0就累加当前连续0的长度 current_zero_length += 1 else: # 遇到1,说明前面的连续0块符合统计条件 if current_zero_length > 0: # 更新全局频率 if current_zero_length in global_frequency: global_frequency[current_zero_length] += 1 else: global_frequency[current_zero_length] = 1 # 重置当前连续0长度,准备统计下一个块 current_zero_length = 0 # 行末尾的连续0块,后面没有1,直接重置不统计 current_zero_length = 0 # 把结果按连续0长度从小到大排序,输出更直观 sorted_result = sorted(global_frequency.items(), key=lambda x: x[0]) return sorted_result # 测试你给的示例矩阵 test_matrix = [ [0, 1, 0, 1, 0, 0], [0, 1, 0, 0, 1, 0, 0, 0, 1] ] # 执行统计并打印结果 final_result = count_target_zero_sequences(test_matrix) print("最终统计结果:") for length, freq in final_result: print(f"连续0长度:{length},频率:{freq}")
运行这段代码后,输出就是:
最终统计结果: 连续0长度:1,频率:3 连续0长度:2,频率:1 连续0长度:3,频率:1
边界情况说明
再给你提几个特殊场景的处理逻辑,避免踩坑:
- 如果某行全是0:没有符合条件的0块,统计结果为空
- 如果某行全是1:没有0块,统计结果为空
- 如果行开头是1,后面跟着0→1:比如
[1,0,1],会统计长度1的频率+1 - 如果行中间有多个间隔的0块:比如
[0,0,1,0,1,0,0,0],会统计长度2和1的频率各+1,最后三个0在末尾不统计
内容的提问来源于stack exchange,提问作者Enrico
相关产品推荐
相关产品推荐

