题目

编写程序,给定一个包含正负数的特征矩阵,使用逻辑索引将其中所有负数元素原地替换为 0(等价于深度学习中的 ReLU 激活函数),完全不使用循环。

输入格式:无需外部输入。

输出格式:输出替换前后的矩阵对比。

数据范围与约定:掩码条件赋值。

思路与算法

1. 条件原地赋值
语法为 A(condition) = value。例如 A(A < 0) = 0。MATLAB 内部会自动将右侧的标量 0 广播填充到掩码为 true 的所有内存槽位上。

2. 对比 max(A, 0)
ReLU 的另一种向量化写法是 max(A, 0),两者在数学上完全等价,均具备极高执行性能。

3. 保持原始矩阵维度
条件原地赋值不同于取值:原地赋值严格保持矩阵的原有行数与列数不变。

完整程序

% Octave / MATLAB 第35题:掩码条件替换负数归零
A = [ 1.5, -2.3,  0.0;
     -0.8,  4.2, -5.1;
      3.0, -1.2,  2.8];

fprintf("处理前矩阵 A:\n");
disp(A);

% 逻辑掩码原地赋值
A(A < 0) = 0;

fprintf("负数清零后 (ReLU 处理结果):\n");
disp(A);

运行示例

输出:

处理前矩阵 A:
   1.5000  -2.3000        0
  -0.8000   4.2000  -5.1000
   3.0000  -1.2000   2.8000
负数清零后 (ReLU 处理结果):
   1.5000        0        0
        0   4.2000        0
   3.0000        0   2.8000