Octave中如何获取两个4×4矩阵逐元素取最小值的来源矩阵?
解决Octave中逐元素最小值来源矩阵的判断问题
嘿,这个需求其实用Octave的逻辑判断就能轻松实现,我给你两种实用的方法,按需选择就行:
方法一:用数值标记来源(简洁高效)
我们可以直接通过逻辑比较生成一个和原矩阵同维度的标记矩阵,比如用1代表最小值来自矩阵A,0代表来自矩阵B:
% 先定义题目中的两个矩阵 A = [ 3, 2, 4, 5; 1, 2, 0, 6; 9, 8, 5, 4; 0, 1, 0, 3 ]; B = [ 1, 1, 6, 8; 0, 4, 6, 3; 5, 6, 7, 1; 0, 2, 3, 4 ]; % 生成标记矩阵:A元素小于等于B时标记为1(来源A),否则为0(来源B) source_flag = (A <= B);
运行后得到的source_flag矩阵是:
0 0 1 1 0 1 1 0 0 0 1 0 1 1 1 1
完全对应min(A,B)的结果:比如第一行第一个元素最小值是B的1,对应标记0;最后一行所有元素的最小值都来自A,对应全1。
注意:如果遇到A和B元素相等的情况(比如最后一行第一个元素都是0),这个逻辑会把它归为来源A。如果想把相等的情况归为B,只需要把判断条件改成
A < B即可。
方法二:用字符标记来源(直观易懂)
如果觉得数值标记不够直观,我们可以生成字符矩阵,直接用'A'和'B'标注来源:
% 先创建一个全为'B'的字符矩阵,尺寸和A、B一致 source_char = repmat('B', size(A)); % 把A元素小于等于B的位置替换为'A' source_char(A <= B) = 'A';
运行后得到的source_char矩阵是:
B B A A B A A B B B A B A A A A
这个结果一眼就能看出每个最小值来自哪个矩阵,非常直观。
两种方法都能完美解决你的需求,根据自己的使用场景选就行~
内容的提问来源于stack exchange,提问作者Santosh Kr
相关产品推荐
相关产品推荐

