使用较小的矩阵迭代矩阵

时间:2019-02-11 18:31:24

标签: matlab matrix

我已经为此苦了一段时间。例如,我有一个小的矩阵s,有一个更大的矩阵B,如下所示。

B =
     0     0     0     0     0     0     1     1
     1     1     0     0     1     0     1     1
     1     1     0     1     0     0     1     1
     1     1     1     0     0     0     1     0
     0     0     1     1     1     0     0     1
     0     0     0     1     1     1     1     1
     1     1     1     0     0     0     1     0
     0     1     1     0     1     1     0     0

s =
     1     1
     1     1

我想做的是用B遍历s并比较这些值。如果s中的所有值等于BB的一小部分)中的值,则答案为1,否则为0。

1's0's也将放置在矩阵中。

这是我到目前为止所做的,但是不幸的是,它没有一步一步地进行迭代,也没有创建矩阵。

s = ones(2,2)

B = randi([0 1],8,8)

f = zeros(size(B))

[M,N]=size(B);   % the larger array
[m,n]=size(s);   % and the smaller...

for i=1:M/m-(m-1)
  for j=1:N/n-(n-1)
    if all(s==B(i:i+m-1,j:j+n-1))
      disp("1")
    else
        disp("0")
    end
  end
end

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

以下代码可在您提供的示例中使用,我尚未在其他任何产品上进行过测试,如果较小矩阵的尺寸不是较大矩阵尺寸的因素,那么它将不起作用,但是您没有在您的描述中指出需要这样做。

B =[0     0     0     0     0     0     1     1
 1     1     0     0     1     0     1     1
 1     1     0     1     0     0     1     1
 1     1     1     0     0     0     1     0
 0     0     1     1     1     0     0     1
 0     0     0     1     1     1     1     1
 1     1     1     0     0     0     1     0
 0     1     1     0     1     1     0     0];

S =[1     1
 1     1];

%check if array meets size requirements
numRowB = size(B,1);
numRowS = size(S,1);
numColB = size(B,2);
numColS = size(S,2);

%get loop multiples
incRows = numRowB/numRowS;
incCols = numColB/numColS;

%create output array
result = zeros(incRows, incCols);

%create rows and colums indices
rowsPull = 1:numRowS:numRowB;
colsPull = 1:numColS:numColB;

%iterate
for i= 1:incRows
    for j= 1:incCols
        result(i,j) = isequal(B(rowsPull(i):rowsPull(i)+numRowS-1, colsPull(j):colsPull(j)+numColS-1),S);
    end
end

%print the resulting array
disp(result)