将矩阵的部分分离成变量 - MATLAB

时间:2014-09-28 11:37:16

标签: matlab

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然后改变它:

enter image description here

我主要关注的是如何能够使用变量名称或数字(例如bin编号)来引用矩阵的特定区域,以便我可以进行更改 - 这只不过是选择的倍数区域内' x'通过另一个广泛的矩阵。我不必手动指定每个bin1,bin2,bin3等。

2 个答案:

答案 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});
相关问题