You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MATLAB中查找仅含单个零的行内该零的列索引

如何提取仅含单个零的行中零的列号

嘿,我明白你的困扰——你已经找到了那些只有一个零的行,但还需要对应列的位置对吧?其实有几种简单的方法可以实现,我给你梳理一下:


方法1:基于你现有代码的扩展

你已经用find(sum(~A,2) == 1)拿到了目标行号,接下来只需要对每一行单独查找零的位置就行。用arrayfun可以很方便地完成这个操作:

% 获取仅含单个零的行索引
target_rows = find(sum(~A, 2) == 1);
% 对每个目标行,查找该行中零的列号
target_cols = arrayfun(@(r) find(~A(r, :)), target_rows);

这里arrayfun会遍历target_rows里的每一行,执行find(~A(r,:))——因为这些行只有一个零,所以返回的就是那个零的列号,结果target_cols和target_rows是一一对应的。


方法2:更高效的向量化操作(推荐)

如果你的矩阵特别大,向量化操作通常比循环/arrayfun更快。我们可以直接标记出所有符合条件的零的位置,一次性提取行列号:

% 生成标记所有零位置的逻辑矩阵
zero_mask = ~A;
% 筛选出"所在行仅有一个零"的那些位置
single_zero_mask = zero_mask & (sum(zero_mask, 2) == 1);
% 获取这些位置的行号和列号
[row_indices, col_indices] = find(single_zero_mask);

这样row_indices就是你原本找到的目标行号,col_indices就是对应的零的列号,两者顺序完全匹配。


方法3:一行式快速提取

如果你已经有了target_rows,也可以直接用索引提取子矩阵后找列号:

target_rows = find(sum(~A,2) == 1);
target_cols = find(~A(target_rows, :));

因为~A(target_rows, :)是仅包含目标行的子矩阵,每行只有一个1(对应原矩阵的零),find会按列优先返回索引,但刚好每行一个结果,所以target_cols就是对应的列号,顺序和target_rows一致。


内容的提问来源于stack exchange,提问作者MaxFrost

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:32:37