MatLab矩阵索引处理:如何获取每行首个0的对应列号并存储
实现方案(MATLAB环境)
你不需要基于赋值后的minimum_value_1000矩阵计算,直接用之前生成的逻辑矩阵minimum_value_logic计算效率更高:逻辑矩阵中值为1的位置就是原矩阵被置为0的位置,直接找每行第一个1的索引即可。
方法1:循环实现(兼容性最优,所有MATLAB版本都支持)
% 初始化结果数组,默认填充NaN,代表该行无值为0的元素 row_first_zero_col = NaN(size(minimum_value_1000, 1), 1); % 遍历每一行 for i = 1:size(minimum_value_logic, 1) % 取当前行第一个逻辑值为1的位置,即第一个被置0的元素列号 col_idx = find(minimum_value_logic(i, :), 1, 'first'); if ~isempty(col_idx) row_first_zero_col(i) = col_idx; end end
- 变量
row_first_zero_col就是最终存储结果,长度和矩阵行数一致,对应每行第一个0的列号,无0的行对应值为NaN,你可以根据需求修改无0行的默认填充值。
方法2:向量化实现(效率更高,适合大尺寸矩阵)
% 对逻辑矩阵按行做累积和,累积和第一次等于1的位置就是该行第一个为1的元素 cum_sum = cumsum(minimum_value_logic, 2); % 提取所有行第一次出现累积和为1的行列索引 [rows, cols] = find(cum_sum == 1, size(cum_sum,1), 'first'); % 赋值到结果数组,无0的行自动保留NaN row_first_zero_col = NaN(size(minimum_value_1000,1),1); row_first_zero_col(rows) = cols;
- 该方法避免了显式循环,处理万行以上的大矩阵时速度优势非常明显。
内容的提问来源于stack exchange,提问作者Rus
相关产品推荐
相关产品推荐

