通过给定行向量及其对应的位置矩阵将值替换为矩阵

时间:2014-11-22 23:47:44

标签: matlab matrix vector


我有一个A = [m,n]矩阵和一个B = [1,n]矩阵。

A是m行排列为1:n的矩阵。

  

A =
       [2 4 1 5 3
        5 2 3 4 1
        1 2 3 4 5]

B只是一个普通的行向量(每个单元格的值不一定是唯一的)

  

B = [0.05 0.03 0.06 0.04 0.02]

现在,我想根据Matrix A的每一行置换B。 例如,

  

i = 1
  B(指数(i,:))= [0.03 0.04 0.05 0.02 0.06]

在for循环之后,那是我想要的结果:

  

C =
           [0.03 0.04 0.05 0.02 0.06
           0.02 0.03 0.06 0.04 0.05
           0.05 0.03 0.06 0.04 0.02]

然而,我处理的当前矩阵非常大,例如m = 100,n = 80,是否有任何构建函数来代替使用for循环?

1 个答案:

答案 0 :(得分:6)

非常简单。只需使用A索引到B

A = [2 4 1 5 3;
     5 2 3 4 1;
     1 2 3 4 5];

B = [0.05 0.03 0.06 0.04 0.02];

B(A)

ans =

    0.0300    0.0400    0.0500    0.0200    0.0600
    0.0200    0.0300    0.0600    0.0400    0.0500
    0.0500    0.0300    0.0600    0.0400    0.0200

你可能在想......哇!......这是怎么回事?由于A的结构方式,A的每个元素都是访问B中特定元素的精确索引,因此我们可以直接使用A没有任何关于向量长度超出范围的元素B.如果您遇到任何元素为零,负数或大于B的长度的情况(或任何浮点数...),那么上面的代码将无法正常工作。

MATLAB索引的工作原理是,如果提供索引的向量或矩阵作为访问另一个向量的参数,则输出将与此输入参数具有相同的形状,并且每个输出元素将对应于您要访问的每个职位。


例如,假设我有这个载体:

B = [9 8 7 6 5];

......我有这个矩阵:

A = [1 1 1;
     2 2 2;
     3 3 3];

我的输出是:

B(A)

ans = 

9  9  9
8  8  8
7  7  7

无论形状A采用什么形状,都将是输出的形状,输出的每个元素都会访问由矩阵A索引的值。因此,因为A的第一行都是1,所以我们将有一整行9,这是B的第一个元素。之后,A的第二行全部为2,B的输出将为8,依此类推。

我提供了一个很好的教程,介绍了我之前发布的一篇文章(实际上,这是我在StackOverflow上写过的第一篇帖子之一......):

Got confused with a vector indexed by a matrix, in Matlab

祝你好运!