题目
编写程序,给定一个 3×3 矩阵,利用逻辑索引(Logical Indexing)一次性抽取所有大于 10 的元素形成一维结果向量。
输入格式:无需外部输入。
输出格式:输出原矩阵、提取出的符合条件的数值向量。
数据范围与约定:逻辑索引取值。
思路与算法
1. 逻辑索引替代循环
C 语言中需要双层循环遍历加 `if` 判断并依次 push 进新数组;而在 Octave 中只需一行 selected = A(A > 10)。这是 MATLAB 向量化最核心的基石。
2. 返回值维度降维
无论原矩阵是几维,将二维逻辑掩码应用到二维矩阵上时,抽出的离散元素必定自动展平为一个一维列向量。元素排列严格遵循列优先顺序。
3. 空匹配安全性
若没有满足条件的元素,A(A > 999) 安全返回空列向量 zeros(0, 1),不会报错。
完整程序
% Octave / MATLAB 第34题:逻辑索引抽取元素
A = [ 5, 12, 3;
18, 7, 25;
2, 14, 9];
% 构造逻辑掩码
mask = (A > 10);
% 直接通过逻辑掩码提取元素 (返回一维列向量)
result = A(mask);
fprintf("原矩阵 A:\n");
disp(A);
fprintf("提取所有大于 10 的元素 A(A > 10):\n");
disp(result'); % 转为行向量展示运行示例
输出:
原矩阵 A:
5 12 3
18 7 25
2 14 9
提取所有大于 10 的元素 A(A > 10):
18 12 14 25