创建行数不等的变量

时间:2013-06-21 18:08:45

标签: matlab

我想创建一个变量,在矩阵(A)的不同行中找到一个模式(比如说[1 1])。当然,每行中此字符串的出现次数不相同。

A = [ 0     0     0     1     1 
      1     1     1     0     0 
      0     1     0     1     1 
      1     1     1     0     0 
      0     1     0     0     1 
      1     0     1     1     1 
      0     1     0     1     0 
      1     1     1     0     1];

我能做到:

for i = 1:n
    var(i,:) = strfind(A(i,:),[1 1]);
end

但是等式的两边都不相等。

  

错误:???订阅的分配维度不匹配。

我尝试预先分配。我创建了一个矩阵,我认为矩阵A的每一行中该字符串的最大出现次数(假设为50)。

for i = 1:n
    var(i, :) = NaN(1,50)
end

接下来是前一段代码,它也没有用。

我也试过了:

for i = 1:n
    var(i,1:numel(strfind(A(i,:),[1 1])) = strfind(A(i,:),[1 1])
end
  

错误:等号左侧的表达式无效   作业的目标。

我该怎么做呢?

我期望的输出是矩阵var(i,:),它给出了矩阵中每个模式出现的位置。它只适用于一行。

例如:

var(1,:) = [1 2 5 8 10 22 48]
var(2,:) = [2 3 4 7 34 45 NaN]
var(3,:) = [4 5 21 32 33 NaN]

谢谢!

1 个答案:

答案 0 :(得分:1)

在您的第一次尝试中:您尝试构建具有不同行长度的矩阵。

在您的第二次尝试中:您已预先分配,但在重新定义var(i,:)时将其重新运行,同时您尝试将所需结果放在那里。

在你的第三次尝试中:不幸的是你在左表达式的末尾错过了一个括号 - )

此代码假设有效(您在第二次和第三次尝试时所执行的操作,使用预分配和固定括号):

var=NaN(1,50);
for i = 1:n
    var(i,1:numel(strfind(A(i,:),[1 1]))) = strfind(A(i,:),[1 1])
end