kar*_*fai 0 matlab vector matrix
我有一个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循环?
满容易.只需用于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
Run Code Online (Sandbox Code Playgroud)
你可能在想......哇!......这是怎么回事?因为如何A
被构造,中的每个元素A
是访问一个特定的元素的准确索引B
,所以我们可以使用逃脱A
直接作为我们没有界限以外的相对于所述矢量的长度的任何元件B.
如你有这样一种情况,其中任何元素为零,负或大于长度B
(或任何浮点数也......),那么上面的代码将不起作用.
MATLAB索引的工作原理是,如果提供索引的向量或矩阵作为访问另一个向量的参数,则输出将与此输入参数具有相同的形状,并且每个输出元素将对应于每个位置的值你想要访问.
例如,假设我有这个向量:
B = [9 8 7 6 5];
Run Code Online (Sandbox Code Playgroud)
......我有这个矩阵:
A = [1 1 1;
2 2 2;
3 3 3];
Run Code Online (Sandbox Code Playgroud)
我的输出是:
B(A)
ans =
9 9 9
8 8 8
7 7 7
Run Code Online (Sandbox Code Playgroud)
无论形状如何A
,都将是输出的形状,输出的每个元素都会访问由矩阵索引的值A
.因此,因为第一行A
都是1,所以我们将有一整行9,这是第一行的元素B
.之后,第二行A
全部为2,输出为B
8,依此类推.
我提供了一个很好的教程,介绍了我之前发布的一篇文章(实际上,我在StackOverflow上写过的第一篇帖子之一......):
祝好运!