matlab中a(b)的含义是什么?其中a和b是矩阵

时间:2014-04-25 09:01:30

标签: matlab

假设:

a =

 1     2     3
 4     5     6
 2     3     4 

b =

 1     3     2
 6     4     8

在MATLAB中a(b)给出:

>> a(b)

ans =

 1     2     4
 3     2     6

此输出的原因是什么?

3 个答案:

答案 0 :(得分:1)

当你有一个矩阵a:

a =
     1     2     3
     4     5     6
     7     8     9

和b:

b =
     1     3     4
     3     2     6

然后a(b)是一种在a中处理项目并给你的方法:

>> a(b)
ans =
     1     7     2   
     7     4     8

要理解这一点,你必须考虑一个单列向量

>> a(:)
ans =
     1
     4
     7
     2
     5
     8
     3
     6
     9

现在b(1 3 4)的第一行处理此向量中的元素,因此该单列向量的第一个,第三个和第四个元素为1 7并且2受到了批评。接下来,b的第一行用作输出中的第二行的地址,因此第3,第2和第6个元素取自a,这些是7 4和8。

答案 1 :(得分:0)

这只是一种matrix indexing。 'a'矩阵中的矩阵索引编号为:

1 4 7
2 5 8
3 6 9

答案 2 :(得分:0)

这可能与此帖子重复,我给出了答案:Got confused with a vector indexed by a matrix, in Matlab

但是,我想在此重复我的答案,因为我认为这是有益的。


这是您正在进行的非常标准的MATLAB操作。如果有矢量或矩阵,则可以提供另一个矢量或矩阵以访问特定值。在MATLAB中访问值不仅限于单个索引(即A(1), A(2)等)。

例如,假设我们有一个向量a = [1 2 3 4]。我们还说我们将b作为矩阵,使其为b = [1 2 3; 1 2 3; 1 2 3]。通过执行a(b)来访问向量,您实际上在做的是查找。输出与b的大小基本相同,您创建的矩阵有3行,每个元素访问第一,第二和第三个元素。您不仅可以为矢量执行此操作,还可以对矩阵执行此操作。

请记住,当您为矩阵执行此操作时,可以访问列主格式中的元素。例如,假设我们有这个矩阵:

 A = [1 2
      3 4
      5 6
      7 8]

A(1)为1,A(2)为3,A(3)为5,依此类推。您将从第一列开始,增加索引将遍历第一列。一旦达到第5个索引,它就会跳到下一列。因此A(5)为2,A(6)为4,依此类推。

以下是一些可以帮助您进一步理解的示例。让我们定义一个矩阵A,以便:

 A = [5 1 3
      7 8 0
      4 6 2]

以下是一些MATLAB代码,可以加强您对此类索引的理解:

 A = [5 1 3; 7 8 0; 4 6 2]; % 3 x 3 matrix
 B = [1 2 3 4];
 C = A(B); % C should give [5 7 4 1]
 D = [5 6 7; 1 2 3; 4 5 6];
 E = A(D); % E should give [8 6 3; 5 7 4; 1 8 6]
 F = [9 8; 7 6; 1 2];
 G = A(F); % G should give [2 0; 3 6; 5 7]

因此,以这种方式访问​​元素时的输出是指定为参数的向量或矩阵的大小。

为了完成,让我们为矢量执行此操作:

 V = [-1 9 7 3 0 5]; % A 6 x 1 vector
 B = [1 2 3 4];
 C = V(B); % C should give [-1 9 7 3]
 D = [1 3 5 2];
 E = V(D); % E should give [-1 7 0 9]
 F = [1 2; 4 5; 6 3];
 G = V(F); % G should give [-1 9; 3 0; 5 7]

NB:您必须确保不提供会使访问超出范围的索引。例如,如果您尝试在示例中指定索引5,则会出现错误。此外,如果您在我的示例中尝试了大于9的任何内容,它也会给您一个错误。该3 x 3矩阵中有9个元素,因此指定大于9的任何列的主要索引都会给出一个越界错误。