【问题标题】:Matlab compare two matrixes with different dimensionMatlab比较两个不同维度的矩阵
【发布时间】:2018-04-28 03:59:21
【问题描述】:

我看到人们将==~=>< 放在矩阵后面的括号中,以获取其条目,如下所示:

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

但是,我不知道为什么这些会起作用。关于这种用法的任何解释? (我的英文不好,无法更好地描述这个问题,希望任何人都可以编辑这个问题以使其更易于理解?提前谢谢!)

【问题讨论】:

  • 关于隐式或算术扩展的更详细说明:blogs.mathworks.com/loren/2016/10/24/…
  • 自 R2016b 以来对 M 语言的逻辑且非常方便的补充。恕我直言,它不应该被包括在内。我知道关于这个话题已经讨论了很多,所以我们不要在这里重做这些讨论,但是正如您所指出的,与线性代数其余部分中的符号不​​兼容确实令人困惑。

标签: matlab matrix syntax relational-operators


【解决方案1】:

自 R2016b 起,MATLAB 使用 implicit expansion。这意味着输入的单一维度(大小为 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 的每一行进行比较。您可以轻松地看到输出符合预期。


使用bsxfun,可以在所有版本的 MATLAB(包括 R2016b 之前的版本)中使用隐式扩展。这看起来像这样:

% Since 2016b
b == [1 2 3];
% All versions (@eq is the '==' equals function)
bsxfun(@eq, b, [1 2 3])

【讨论】:

    猜你喜欢
    • 2016-08-03
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多