基于规则的Matlab多重矩阵

时间:2017-05-23 10:36:57

标签: matlab row

我有这个矩阵

mp=
2
5
8


fp=
0.67   0.34   0
0.34   0.34   0.34
0      0.5    0.5

和这个矩阵

t=
1
1
1
2
3
2
3

遵守这条规则:

  • 如果t = 1则输出= mp *(fp第一行)
  • 如果t = 2则输出= mp *(fp第2行)
  • 如果t = 3则输出= mp *(fp第3行)

所以输出应该是这样的:

output=
3
3
3
5
6,5
5
6,5

我正在尝试使用此代码 但输出== t

[o p]=size(t)
[q r]=size(mp)
for i=1:o;
    j=1:q;

    if t(i)==j
        output=mp*fp(j,:)
    else
        output=t(i)
    end
end

2 个答案:

答案 0 :(得分:0)

由于您的 t 值已经是行号,因此您可以直接使用 t 值进行乘法运算。

mp=[2
5
8] ;

fp=[0.67   0.34   0
0.34   0.34   0.34
0      0.5    0.5] ;
t=[1
1
1
2
3
2
3] ;

iwant = cell(size(t)) ;  % initilaize the required data 

for i = 1:length(t)    % loop for each value of _t_
    iwant{i} = mp*fp(t(i),:) ;
end

答案 1 :(得分:0)

一线解决方案

您可以使用以下语法:

output = sum(repmat(mp,1,length(t))'.*fp(t,:),2)

<强>结果

ans =
3.0400
3.0400
3.0400
5.1000
6.5000
5.1000
6.5000

示例

%variables declaration
fp= [0.67   0.34   0; 0.34   0.34   0.34;0      0.5    0.5];
mp = [2; 5; 8]
t = [1,1,1,2,3,2,3]

%calculates result
output = sum(repmat(mp,1,length(t))'.*fp(t,:),2)