我看到人们在矩阵后面的矩阵之间使用==
,~=
,>
,<
来获取其条目,如下所示:< / p>
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
但是,我不知道为什么这些会起作用。有关此用法的任何解释? (我的英语不好描述这个问题,希望有人可以编辑这个问题,使其更容易理解?提前感谢!)
答案 0 :(得分:1)
自R2016b起,MATLAB使用implicit expansion。这意味着输入&#39;单个尺寸(尺寸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个示例都是&#34;单例维度为行&#34;例如,重复比较行向量并与b
的每一行进行比较。您可以很容易地看到输出符合预期。
使用bsxfun
可以在所有版本的MATLAB(包括R2016b之前版本)中使用隐式扩展。这看起来像这样:
% Since 2016b
b == [1 2 3];
% All versions (@eq is the '==' equals function)
bsxfun(@eq, b, [1 2 3])