numSeg = 10; %Set number of segments
wSeg = 10; %Set segment width
x = ones(1,numSeg*wSeg);
为每个创建的段自动提供变量的最有效方法是什么?例如:
bin1 = x(1:10)
bin2 = x(11:20)
等等。
最终我会随机生成一个数字(1:numSeg)来挑选一个bin然后改变它:
我主要关注的是如何能够使用变量名称或数字(例如bin编号)来引用矩阵的特定区域,以便我可以进行更改 - 这只不过是选择的倍数区域内' x'通过另一个广泛的矩阵。我不必手动指定每个bin1,bin2,bin3等。
答案 0 :(得分:2)
for segment_id = 1:numSeg
bin = x((segment_id-1)*wSeg+1 : segment_id*wSeg) %// x values for each segment.
%// So, for segment_id = 1, you would have bin as x(1:10)
%// for segment_id = 2, you would have bin as x(11:20)
%// ........
%// for segment_id = 10, you would have bin as x(91:100)
end
因此,您可以使用segment_id = randi([1 numSeg])
获得随机的segment_id,然后使用 -
bin = x((segment_id-1)*wSeg+1 : segment_id*wSeg)
获取该特定随机段的bin值。
举个例子,我输入了 -
segment_id = randi([1 numSeg])
我得到了 -
segment_id =
7
然后,我使用bin = x((segment_id-1)*wSeg+1 : segment_id*wSeg)
给了我 -
ans =
61 62 63 64 65 66 67 68 69 70
答案 1 :(得分:0)
基本上您正在寻找的是如何以便于访问/使用的格式存储每个bin的索引。当然有很多方法可以做到这一点。这是我个人认为合适的,但你的里程可能会有所不同。
你已经拥有的东西:
numSeg = 10; %//Set number of segments
wSeg = 10; %//Set segment width
x = ones(1,numSeg*wSeg);
创建索引并将它们存储在单元格数组中:
linear_indices = 1:numSeg*wSeg; %// row vector
bin = mat2cell(linear_indices,1,ones(1,numSeg)*wSeg); %// cell array gives flexibility in bin size, if you need it
使用索引访问bin 4:
x(bin{4});