0

给定权重向量

w = [0.1, 0.1, 0.1, 0.1, 0.1];

应该导致

wg = [0.15 0.05 0.1  0.1  0.1; 
      0.15 0.1  0.05 0.1  0.1; 
      0.15 0.1  0.1  0.05 0.1; 
      0.15 0.1  0.1  0.1  0.05; 
      0.05 0.15 0.1  0.1  0.1; 
      0.1  0.15 0.5  0.1  0.1; ...] 

所以会有可能分配的矩阵,所以每个元素w都会增加和减少0.05

我尝试使用循环,但这似乎是不正确的方法,因为存在索引超过矩阵维度的情况。是否可以使用循环?有什么解决办法吗?谢谢你。

4

2 回答 2

0

可以使用循环:

w = [0.1, 0.1, 0.1, 0.1, 0.1];
n = length(w);

adj = [0.05*ones(n-1,1), -0.05*eye(length(w)-1)];

wg = bsxfun(@plus, w, adj);
for c = 2:n
   adj(:,[c-1, c]) = adj(:,[c, c-1]);
   wg = [wg; bsxfun(@plus, w, adj)];
end

这导致

wg =

   0.150000   0.050000   0.100000   0.100000   0.100000
   0.150000   0.100000   0.050000   0.100000   0.100000
   0.150000   0.100000   0.100000   0.050000   0.100000
   0.150000   0.100000   0.100000   0.100000   0.050000
   0.050000   0.150000   0.100000   0.100000   0.100000
   0.100000   0.150000   0.050000   0.100000   0.100000
   0.100000   0.150000   0.100000   0.050000   0.100000
   0.100000   0.150000   0.100000   0.100000   0.050000
   0.100000   0.050000   0.150000   0.100000   0.100000
   0.050000   0.100000   0.150000   0.100000   0.100000
   0.100000   0.100000   0.150000   0.050000   0.100000
   0.100000   0.100000   0.150000   0.100000   0.050000
   0.100000   0.050000   0.100000   0.150000   0.100000
   0.100000   0.100000   0.050000   0.150000   0.100000
   0.050000   0.100000   0.100000   0.150000   0.100000
   0.100000   0.100000   0.100000   0.150000   0.050000
   0.100000   0.050000   0.100000   0.100000   0.150000
   0.100000   0.100000   0.050000   0.100000   0.150000
   0.100000   0.100000   0.100000   0.050000   0.150000
   0.050000   0.100000   0.100000   0.100000   0.150000

这就是我认为你所追求的。没有循环也可能是可能的,但我相信这就足够了。

于 2013-10-29T10:13:03.397 回答
0

您想要添加/减去每个重量 -.05、0 或 0.05 重量。涵盖所有可能性(5 个元素中的 3 个,总共 3^5 个选项):

>> n = length( w );
>> [x{1:n}] = ndgrid( -1:1 );
>> x = cellfun( @(y) y(:), x, 'uni', 0 );
>> wg = bsxfun(@plus, w, [x{:}]*.05 );
于 2013-10-29T10:15:09.377 回答