【问题标题】:Segregating portions of a matrix into variables - MATLAB将矩阵的各个部分分离为变量 - MATLAB
【发布时间】:2014-09-28 11:37:15
【问题描述】:
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' 内的区域由另一个 wSeg 宽的矩阵组成。我宁愿不必手动指定每个 bin1、bin2、bin3 等。

【问题讨论】:

  • 我需要 x 为 1:numSeg*wSeg 但填充为 1。
  • 图片显示x = 1:100,表示x = [1,2,3,4...100],而代码读取x = ones(1,100),即x=[1,1,1,...1(100 times)]。因此,这可能会使其他人感到困惑。我仍然认为x 必须是1:100 i.e. [1,2,..100] 而不是alls,因为在后一种情况下,您不需要索引x,因为任何对allones 数组的索引只会产生一个。

标签: matlab


【解决方案1】:
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

【讨论】:

  • 我不确定这是否解决了我的问题。我很抱歉,因为我可能使我的原始帖子不清楚 - 我已经更新了它。
  • 这是完美的。谢谢。
【解决方案2】:

基本上,您要寻找的是如何以方便访问/使用的格式存储每个 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});

【讨论】:

  • 有趣的方法。谢谢你。定义 bin 的最后一行当前返回错误:Error using mat2cell (line 107) Input arguments, D1 through D2, must sum to each dimension of the input matrix size, [1 100].' 但我不确定是什么原因造成的。
  • @AnnaSchumann 现在已修复 - 我忘记了 mat2cell 参数的要求 - 试一试。随着项目的推进,能够将任意组索引保留为 bin 可能是有益的,而不是将规则硬编码到实际的索引步骤中。至少,以这种方式记录和维护应该更容易。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多