如何创建一个以n为参数并在matlab中创建子矩阵的函数

时间:2015-05-06 07:57:15

标签: matlab matrix submatrix

大家好我陷入了一个问题。我将创建一个名为quadrants的函数,它将一个名为n的标量整数作为其输入参数。该函数返回Q,一个2n×2n的矩阵。 Q由四个n×n子矩阵组成。左上角的子矩阵的元素都是1,右上角的子矩阵的元素是2s,左下角的元素是3s,右下角的元素是4s。

提前感谢您的帮助..

3 个答案:

答案 0 :(得分:1)

使用bsxfunreshapepermute

的另一种方法
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

答案 1 :(得分:1)

我认为这是最简单的方法(尽量避免在matlab中使用多个" for"循环,它不喜欢它们,尝试使用尽可能多的矩阵):

function[r] = Quadrant(n)
a = ones(n);
r = [a 2*a; 3*a 4*a];
end

答案 2 :(得分:1)

def copy_to_clipboard(self):
    application=QApplication(sys.argv)
    if not self.image.isNull():
        application.clipboard().setImage(self.image)