我有一个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循环?
答案 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上写过的第一篇帖子之一......):
祝你好运!