我想创建一个变量,在矩阵(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]
谢谢!
答案 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