题目
编写程序,给定一个包含正数、负数与零的矩阵,使用关系运算符(>、<、==、~=)与标量比较,观察生成的 logical 逻辑布尔掩码矩阵的结构。
输入格式:无需外部输入。
输出格式:输出测试矩阵及各个条件生成的 0/1 逻辑矩阵。
数据范围与约定:关系运算符。
思路与算法
1. 关系运算返回逻辑矩阵
在 Octave 中,A > 0 会对矩阵 A 的每个元素逐一判定,返回同维度的 logical 类型矩阵,满足条件处为 1(true),不满足为 0(false)。
2. 不等于操作符 ~=
初学者常误写 C 语言风格的 !=(虽然 Octave 做了兼容,但 MATLAB 严格不支持)。为了跨平台通用性,必须规范使用波浪线等号 ~=。
3. 逻辑数组的运算
逻辑掩码可直接当做数值参与加减(如 sum(A > 0) 统计正数个数)。
完整程序
% Octave / MATLAB 第33题:关系运算符生成逻辑掩码
A = [-2, 0, 5;
3, -1, 0];
mask_gt = (A > 0); % 大于 0 掩码
mask_eq = (A == 0); % 等于 0 掩码
mask_ne = (A ~= 0); % 不等于 0 掩码 (规范写作 ~=)
fprintf("原矩阵 A:\n");
disp(A);
fprintf("逻辑掩码 A > 0 (正数位置):\n");
disp(mask_gt);
fprintf("逻辑掩码 A == 0 (零位置):\n");
disp(mask_eq);
fprintf("正数总个数 sum(A(:) > 0) = %d\n", sum(A(:) > 0));运行示例
输出:
原矩阵 A:
-2 0 5
3 -1 0
逻辑掩码 A > 0 (正数位置):
0 0 1
1 0 0
逻辑掩码 A == 0 (零位置):
0 1 0
0 0 1
正数总个数 sum(A(:) > 0) = 2