t=3;
如果我有矩阵A(9x9xt):
1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17 18
19 20 21 22 23 24 25 26 27
28 29 30 31 32 33 34 35 36
37 38 39 40 41 42 43 44 45
46 47 48 49 50 51 52 53 54
55 56 57 58 59 60 61 62 63
64 65 66 67 68 69 70 71 72
73 74 75 76 77 78 79 80 81
矢量B(9x1xt):
0.5
0.6
0.7
0.5
0.6
0.7
0.5
0.6
0.7
for j=1:t
我试图将A(7,1,j)的百分比移动到A(7,2,j + 1)。在这种情况下,百分比是B(3,1,j)。
我以为我应该创建一个新值m(1,1,j),它保存百分比值:B(3,1,j)* A(7,1,j)......
m(1,1,j)= A(7,1,j)*B(3,1,j); %# Find out what the percentage of A(7,1,j) is.
A(7,2,j+1)= A(7,2,j)+m(1,1,j); %# Add that ''percentaged'' value to the A(7,2,j+1)
A(7,1,j+1) = A(7,1,j)-m(1,1,j); %# Remove that ''percentaged'' value from A(7,1,j+1)
然而,这不起作用。当我输入“m(1,1,j)”时,m(1,1,j)实际上似乎不等于A(7,1,j)* B(3,1,j).. < / p>
编辑:这可以在循环中完成吗?
答案 0 :(得分:1)
你的最后一行应该是:
A(7,1,j) = A(7,1,j)-m(1,1,j);
而不是
A(7,1,j+1) = A(7,1,j)-m(1,1,j);
至于是否有更好的方法来做到这一点 - 我不确定,因为我不确定你最终要做什么。我猜想如果你试图对所有行或所有列执行此操作,或者以其他方式重复执行此操作,那么将会有一种矢量化方式来执行此操作而不是for
循环。 / p>
答案 1 :(得分:1)
显然有两个问题。首先是你最后一行的j+1
(如@Sam所示)。其次,您错误地将{em> j 项添加到j*m(1,1,j)
而不是m(1,1,j)
。发生这种情况是因为您添加到下一个元素,然后移动,然后添加累积的金额。修正后的矢量化版本:
t=3;
A = repmat(reshape(1:81,9,9)',[1,1,t]);
B = repmat([0.5 0.6 0.7 0.5 0.6 0.7 0.5 0.6 0.7]', [1,1,t]);
m(1,1,1:t)= A(7,1,1:t).*B(3,1,1:t); %# Find out what the percentage of A(7,1,j) is.
A(:,:,t+1)=0; % Add zeros matrix at A(:,:,t+1)
A(7,2,2:t+1) = A(7,2,2:t+1)+m(1,1,1:t); %# Add that ''percentaged'' value to the A(7,2,j+1)
A(7,1,1:t) = A(7,1,1:t)-m(1,1,1:t); %# Remove that ''percentaged'' value from A(7,1,j+1)
注意:您的原始代码也会增加A的大小。