0

こんにちは、私は問題に陥っています。入力引数として n という名前のスカラー整数を取る quadrants という関数を作成します。この関数は、2n 行 2n 列の行列 Q を返します。Q は 4 つの n 行 n 列の部分行列で構成されます。左上隅の部分行列の要素はすべて 1、右上の部分行列の要素は 2、左下隅の要素は 3、右下の要素は 4 です。

助けてくれてありがとう..

4

3 に答える 3

1

bsxfunreshapeおよびを使用したもう1つのアプローチpermute

function [ out ] = quadrants( n )
out = reshape(permute(reshape(bsxfun(@times,...
       ones(n,n,4),permute(1:4,[1 3 2])),n,2*n,[]),[1 3 2]),2*n,[]);
end

結果:

>> quadrants(3)

ans =

 1     1     1     2     2     2
 1     1     1     2     2     2
 1     1     1     2     2     2
 3     3     3     4     4     4
 3     3     3     4     4     4
 3     3     3     4     4     4

OPはforループで絶望的であるため、ここに別のルーピーなアプローチがあります

function [ out ] = quadrants( n )
out(2*n,2*n) = 0;
count = 1;
for ii = 1:n:2*n
    for jj = 1:n:2*n
        out(ii:ii+n-1,jj:jj+n-1) = count;
        count = count + 1;
    end
end
end

結果:

>> quadrants(2)

ans =

 1     1     2     2
 1     1     2     2
 3     3     4     4
 3     3     4     4
于 2015-05-06T08:14:36.590 に答える
1

私はそれを行う最も簡単な方法だと思います(matlabで複数の「for」ループを避けるようにしてください。それらは好きではありません。できるだけ多くの行列を使用してみてください):

function[r] = Quadrant(n)
a = ones(n);
r = [a 2*a; 3*a 4*a];
end
于 2015-05-06T11:05:00.167 に答える