所以我有这个矩阵
A=
7
B=
0.34 0.34 0.34
0.50 0.25 0.25
和这个矩阵
C=
1
1
4
2
3
6
3
遵守这条规则:
或一般情况下:
所以输出应该是这样的:
output=
7.14
7.14
4
7
3
6
3
我尝试使用此代码,但它不起作用
sizeA=size(A,1)
sizeB=size(B,1)
for i=1:sizeB
if (B(i)<=sizeA)
Output=sum(repmat(A,1,length(C))'.*B(C,:),2)
else
Output=C(i)
end
end
答案 0 :(得分:0)
正确的代码是:
sizeA=size(A,1);
sizeB=size(B,1);
sizeC=size(C,1);
Output = zeros(size(C)); % preallocate memory for efficiency
for i=1:sizeC
if C(i)<=sizeB
Output(i)=sum(A * B(C(i), :));
else
Output(i)=C(i);
end
end
您还可以通过以下方式避免使用for循环:
% make B of the same size as C
B_ = zeros(size(C));
B_(1:size(B, 1)) = sum(B, 2);
% calculate the output
output = C .* (C > size(B, 1)) + A .* B_(C)
请尝试理解代码,不要只使用它。
答案 1 :(得分:0)
我简化了一点。它有效。
for i=1:length(C)
num=C(i);
switch num
case 1
output(i)=sum(A*B(1,:))
case 2
output(i)=sum(A*B(2,:))
otherwise
output(i)=C(i);
end
end
output =
Columns 1 through 5
7.1400 7.1400 4.0000 7.0000 3.0000
Columns 6 through 7
6.0000 3.0000