我看到人们在矩阵后面的括号中具有不同维度的矩阵之间取==
、~=
、>
、<
来获取其条目,如下所示:
b =
1 4 7
2 5 8
3 6 9
>> b == [1 2 3]
ans =
3×3 logical array
1 0 0
0 0 0
0 0 0
>> b == [1 4 7]
ans =
3×3 logical array
1 1 1
0 0 0
0 0 0
>> b == [1 4 5]
ans =
3×3 logical array
1 1 0
0 0 0
0 0 0
>> b == [1 5 4]
ans =
3×3 logical array
1 0 0
0 1 0
0 0 0
>> a
a =
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
>> a(:, b == [1 4 5])
ans =
1 4
1 4
1 4
>> a(:, b == [1 5 4])
ans =
1 5
1 5
1 5
>> b
b =
1 4 7
2 5 8
3 6 9
>> b > [1 3 2]
ans =
3×3 logical array
0 1 1
1 1 1
1 1 1
但是,我不知道为什么这些会起作用。关于这种用法的任何解释?(我的英语不好更好地描述这个问题,希望任何人都可以编辑这个问题以使其更易于理解?提前感谢!
自 R2016b 以来,MATLAB 使用隐式扩展。这意味着输入的单例维度(大小为 1 的维度(重复为与其他输入的大小相同。
例如:
b = [1 4 7
2 5 8
3 6 9]
%% Singleton dimension as rows
b == [x y z]
% is equivalent to
b == repmat([x y z], size(b,1), 1)
% is equivalent to
b == [x y z
x y z
x y z]
%% Singleton dimension as columns
b == [x; y; z]
% is equivalent to
b == repmat([x; y; z], 1, size(b,2))
% is equivalent to
b == [x x x
y y y
z z z]
您的所有 3 个示例都是"单例维度作为行"的情况,向下重复您的比较行向量并与每一行b
进行比较。您可以轻松看到输出符合预期。
隐式扩展可以在所有版本的 MATLAB(包括 R2016b 之前(中使用,使用 bsxfun
。这看起来像这样:
% Since 2016b
b == [1 2 3];
% All versions (@eq is the '==' equals function)
bsxfun(@eq, b, [1 2 3])