【问题标题】:Substitute value to Matrices by given a Row Vector and Their Corresponding Location Matrix通过给定行向量及其对应的位置矩阵将值替换为矩阵
【发布时间】:2014-11-22 23:47:43
【问题描述】:


我有一个 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]

现在,我想根据矩阵 A 的每一行排列 B。 例如,

我 = 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循环?

【问题讨论】:

    标签: matlab matrix vector


    【解决方案1】:

    很简单。只需使用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

    祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-05
      • 2017-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-01
      相关资源
      最近更新 更多