2014-09-28 35 views
2
numSeg = 10;  %Set number of segments 
wSeg = 10;  %Set segment width 
x = ones(1,numSeg*wSeg); 

什么是自动为每个创建的段提供变量的最有效方法?例如:将矩阵的部分分离为变量 - MATLAB

bin1 = x(1:10) 
bin2 = x(11:20) 

等等。

最终,我会生成一些随机(1:numSeg)挑一箱,然后修改它:

enter image description here

我主要是卡在如何能够引用的特定区域一个使用变量名或数字(如bin数)的矩阵,这样我就可以进行变更 - 这只不过是将'x'中的选定区域乘以另一个宽的矩阵。我宁愿没有手动指定每个BIN1,BIN2,BIN3等

+0

我需要x为1:numSeg * wSeg,但填充1。 – AnnaSchumann 2014-09-28 13:36:12

+0

图像显示'x = 1:100',意思是'x = [1,2,3,4 ... 100]',而代码读取'x = ones(1,100)',即'x = [ 1,1,1,... 1(100次)]'。所以,这可能会让其他人感到困惑。我仍然认为'x'必须是'1:100',即[1,2,... 100]而不是全部1,因为在后一种情况下,不需要索引到'x',因为任何索引进入所有的数组只会产生一个。 – Divakar 2014-09-28 14:02:03

回答

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与segment_id = randi([1 numSeg]),然后使用 -

得到二进制数值的那个特定的随机段。

举个例子,我输入 -

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 
+0

我不确定这是否解决了我的问题。我很抱歉,因为我可能让我原来的帖子不清楚 - 我已经更新了它。 – AnnaSchumann 2014-09-28 12:43:31

+0

@AnnaSchumann检查编辑,如果他们现在有意义。 – Divakar 2014-09-28 13:43:44

+0

这是完美的。谢谢。 – AnnaSchumann 2014-09-28 13:51:15

0

基本上你在做什么寻找的是如何以便于访问/使用的格式存储每个垃圾箱的索引。当然有很多方法可以做到这一点。这是我个人认为效果很好的一个,但是你的里程可能会有所不同。

你已经拥有:

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 

使用索引来访问斌4:

x(bin{4}); 
+0

有趣的方法。谢谢。定义'bin'的最后一行当前返回错误:'使用mat2cell的错误(行107) 输入参数D1到D2必须求和到输入矩阵大小的每个维度[1 100]。'但我不是确定是什么造成了这一点。 – AnnaSchumann 2014-09-28 13:44:31

+0

@AnnaSchumann它现在已经修复 - 我忘记了mat2cell的参数要求 - 试试看。随着项目的推进,能够将任意索引集合保存为分区可能是有益的,而不是将规则硬编码到实际索引步骤中。至少应该更容易记录和维护这种方式。 – tmpearce 2014-09-28 15:52:16