news 2026/4/16 15:59:34

在指定条件下获取布尔矩阵中的索引矩阵

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在指定条件下获取布尔矩阵中的索引矩阵

问题重新描述如下,设计程序
[[False False False True True True]
[ True False True False False True]
[False False False True True True]
[ True False False False False False]
[False False False False False False]
[ True False False False False False]
[ True True False True False False]
[False False False True False False]
[ True False True False False True]
[False False False True True True]
[ True True False True False False]
[ True False True False False True]
[ True True False True False False]]

使用 np.where查找前面布尔矩阵中,

1、如果1,4,6列有两个True,则给我返回1,4,6列值为True的行列索引,放在前两个位置(行对索引应一个矩阵,列索引对应一个矩阵),剩下的那一个没有True的则返回该元素原始索引,放在第三个位置。

2、2,3,5列中最多有一个True,返回它的行列索引,放在返回数组的第四个位置。如果1,4,6列中True的个数小于2,就返回 1,4,6列的原始行列索引(放在返回数组的1,2,3列),以及第二列的索引(放在返回数组的第4列)。

3、最终返回两个索引数组,一个是行索引数组,另一个是列索引数组,每一行的索引必须与布尔矩阵中的行相对应

defelegant_solution(arr):""" 修正的向量化版本,无循环 """n_rows=arr.shape[0]# 1. 行索引数组row_array=np.repeat(np.arange(n_rows)[:,None],4,axis=1)# 2. 预定义列cols_146=np.array([0,3,5])cols_235=np.array([1,2,4])# 3. 初始化列索引数组col_array=np.zeros((n_rows,4),dtype=int)# 4. 计算第1,4,6列True数量counts_146=arr[:,cols_146].sum(axis=1)# 5. 区分两种情况mask_eq2=counts_146==2mask_lt2=counts_146<2# 6. 处理mask_lt2为True的情况(True个数小于2)# 设置默认值:第1,4,6列和第2列col_array[mask_lt2]=np.array([0,3,5,1])# 7. 处理mask_eq2为True的情况(True个数等于2)ifnp.any(mask_eq2):rows_eq2=np.where(mask_eq2)[0]n_eq2=len(rows_eq2)ifn_eq2>0:# 提取这些行的第1,4,6列arr_146_sub=arr[rows_eq2][:,cols_146]# 方法:使用argsort分离True和False# 对每行进行排序,True(1)会排在False(0)后面sorted_indices=np.argsort(arr_146_sub,axis=1)# 默认升序,False在前# 提取True的位置(最后两个)和False的位置(第一个)true_indices=sorted_indices[:,-2:]# 形状: (n_eq2, 2)false_indices=sorted_indices[:,0:1]# 形状: (n_eq2, 1)# 转换为原始列索引true_cols=cols_146[true_indices]false_cols=cols_146[false_indices]# 填充前三个位置col_array[rows_eq2,0]=true_cols[:,0]col_array[rows_eq2,1]=true_cols[:,1]col_array[rows_eq2,2]=false_cols[:,0]# 处理第2,3,5列arr_235_sub=arr[rows_eq2][:,cols_235]# 找到每行第一个True的位置# 使用cumsum找到第一个Truecumsum_arr=np.cumsum(arr_235_sub,axis=1)first_true_mask=(cumsum_arr==1)&arr_235_sub# 获取列索引# argmax会返回第一个最大值的位置,我们确保每行至多一个Truefirst_true_idx=np.argmax(first_true_mask,axis=1)# 检查是否找到Truehas_true=np.any(first_true_mask,axis=1)# 转换并填充# 注意:当没有True时,argmax返回0,但我们需要-1# 所以使用where根据has_true选择值col_235_vals=np.where(has_true,cols_235[first_true_idx],-1)col_array[rows_eq2,3]=col_235_valsreturnrow_array,col_array
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 9:03:00

国产操作系统知识点总结

一、国产数据库发展背景与战略意义​ 1. 核心驱动力​ 政策支撑&#xff1a;国家信创战略推动&#xff0c;数据库作为 “核高基” 关键领域&#xff0c;成为信息技术自主可控的核心载体。​ 市场需求&#xff1a;2025 年信创市场规模超 3.3 万亿元&#xff0c;数据库细分市场…

作者头像 李华
网站建设 2026/4/16 5:59:30

使用 Docker 的 Node.js(附:三种 Node.js 环境详细对比)

本文介绍了在Docker容器中运行Node.js应用的核心概念和优势。与传统本地安装相比&#xff0c;Docker化的Node.js具有环境一致性、多版本共存和项目隔离等优点。文章详细说明了开发模式、Docker Compose配置等典型工作流&#xff0c;并提供了创建Docker化Node项目的具体操作示例…

作者头像 李华
网站建设 2026/4/15 20:02:16

YOLOv8能否识别古代碑文?石刻文献整理助手

YOLOv8能否识别古代碑文&#xff1f;石刻文献整理助手 在博物馆的修复室里&#xff0c;一位研究员正对着一块唐代碑刻照片逐字圈画——风化的字迹模糊不清&#xff0c;裂纹与苔藓交织成网&#xff0c;手动标注耗时数小时却仍难保准确。这样的场景&#xff0c;在文化遗产数字化进…

作者头像 李华
网站建设 2026/4/16 6:00:26

三极管开关电路原理实战:通过波形理解响应延迟

三极管开关电路实战&#xff1a;从波形看透响应延迟的本质 在嵌入式系统和硬件设计的世界里&#xff0c;我们常以为“高电平导通、低电平关断”是理所当然的事。可当你真正用示波器抓一下信号&#xff0c;却发现—— 输出明明该断开了&#xff0c;却还在拖着尾巴慢慢下降&…

作者头像 李华
网站建设 2026/4/16 6:02:30

YOLOv8结合脑机接口:视觉关注点与神经信号对应研究

YOLOv8结合脑机接口&#xff1a;视觉关注点与神经信号对应研究 在认知科学和人机交互的交汇处&#xff0c;一个关键问题始终萦绕&#xff1a;我们“看到”的&#xff0c;是否就是我们真正“注意”到的&#xff1f;传统方法依赖眼动追踪或主观报告来推断注意力&#xff0c;但这些…

作者头像 李华
网站建设 2026/4/16 6:02:27

九牧的韧性增长:从中国第一到世界第一

文 | 螳螂观察作者 | 余一在吴晓波2025年科技人文秀舞台上&#xff0c;“AI闪耀中国”的宏大叙事揭示了技术浪潮席卷一切的必然。从能文能武的机器人&#xff0c;到全面接管生活的AI大模型&#xff0c;再到被AI渗透与融合的先进制造业工厂&#xff0c;都在诠释真正的科技革命&a…

作者头像 李华