给定权重向量
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
。
我尝试使用循环,但似乎是不正确的方法,因为当索引超过矩阵维度时会出现这种情况。是否可以使用循环?有解决方案吗谢谢。
答案 0 :(得分: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
我认为你追求的是什么。它可能没有循环,但我确信这就足够了。
答案 1 :(得分:0)
您想要添加/减去每个重量-0.5,0或.05重量。 为了涵盖所有可能性(5个中有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 );