1

我想创建一个在矩阵 (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]

谢谢!

4

1 回答 1

1

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

在您的第二次尝试中:您预先分配,然后通过重新定义运行它var(i,:),同时您尝试将您想要的结果放在那里。

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

此代码假设有效(您在第 2 次和第 3 次尝试时所做的,带有预分配和固定括号):

var=NaN(1,50);
for i = 1:n
    var(i,1:numel(strfind(A(i,:),[1 1]))) = strfind(A(i,:),[1 1])
end
于 2013-07-07T09:30:18.917 回答