Matlab 如何连接较小的矩阵以形成较大的矩阵?

Matlab 如何连接较小的矩阵以形成较大的矩阵?,matlab,matrix,concatenation,Matlab,Matrix,Concatenation,我想将14641个3X3矩阵连接成一个363X363大小的矩阵,大矩阵必须在每一行中包含121个子矩阵(121*3=363列)和121个这样的子矩阵行(121*3=363行)。我已经经历了类似的问题,但我没有得到连接大量矩阵的正确逻辑。 等待您的建议。提前谢谢 PS:我从363X363矩阵中得到了3X3矩阵。以下代码用于将单个矩阵拆分为子矩阵 I=imread('photo.jpg'); B = randi([0 255],363,726,3); B(1:numel(I)) = I; L=B(1

我想将14641个3X3矩阵连接成一个363X363大小的矩阵,大矩阵必须在每一行中包含121个子矩阵(121*3=363列)和121个这样的子矩阵行(121*3=363行)。我已经经历了类似的问题,但我没有得到连接大量矩阵的正确逻辑。 等待您的建议。提前谢谢

PS:我从363X363矩阵中得到了3X3矩阵。以下代码用于将单个矩阵拆分为子矩阵

I=imread('photo.jpg');
B = randi([0 255],363,726,3);
B(1:numel(I)) = I;
L=B(1:363,1:363);
[al,bl]=size(L);
ImageSize=al*bl;
BlockD=3; % i assume 3x3 block
BlockSize=BlockD*BlockD;
TotalBlocks=ImageSize/BlockSize;
subL=zeros(BlockD,BlockD,TotalBlocks); %arrays of blocks.
LL=double(L); 
k=1;
for i=1:BlockD:al
 for j=1:BlockD:bl
    subL(:,:,k)=LL(i:i+BlockD-1,j:j+BlockD-1); 
    k=k+1;
 end
end
现在我想将所有这些“subL”子矩阵连接起来,再次形成“LL”

使用blocproc而不是上面的代码 我试着用blockproc函数代替上面的代码。我已经完成了这段代码,并且工作得很好。谢谢

I=imread('photo.jpg');
B = randi([0 255],363,726,3);
B(1:numel(I)) = I;
L=B(1:363,1:363);
q=[1 2 3 4];
fun=@(block_struct)quaternionrotate(q,block_struct.data);
LL = blockproc(L,[3 3],fun);
函数四元数旋转是

function [ Lrot1 ] = quaternionrotate(q,A)
 qinv=quatinv(q);
 B=zeros(3,1);
 A1=[B A];
 Lrot=quatmultiply(q,quatmultiply(A1,qinv));
 Lrot(:,1)=[];
 Lrot1=Lrot;
end

终于弄明白了

% I used this to make 14641 3x3 sample matrices, you should use your own

matrix = ones(3,3);
for i = 2:14641
   matrix = [matrix, i*ones(3,3)]; 
end

c_size = 121;

output = cell(c_size, c_size) % Make 121x121 cell matrix

% Populate the cell matrix
for i = 1:1:c_size
    for j = 1:1:c_size
        output(i,j) = {matrix(1:3, (i-1)*c_size*3+(j-1)*3+1 : (i-1)*c_size*3+(j-1)*3+3)};
    end
end
这会将363个3x3矩阵的43923x3大小矩阵分解为121x121个3x3矩阵单元矩阵。现在这是一个绕口令


无论哪种方式,代码都能满足您的需要!:)

请不要告诉我所有这些矩阵都作为单独的变量单独存储……因为您非常明智地将矩阵存储在
3x3x1461
矩阵中,所以只需将其重新塑造为
363x363
矩阵即可。您只需要告诉我们
3x3
矩阵的存储顺序。如果你没有合理地存储这些信息,那么你就处于一个受伤的世界中。我建议你从中添加相关信息,这是一个相当好的主意@excaza。我现在正在编辑这个问题。@bicker我希望它们被安排为[m1 m2..m121;m122 m123…m242;m243…m14641];它可能值得您同时研究MATLAB的“重塑”命令?如果你重新构造你的数据,它可能会被证明是有用的。是的@dean_sh,但我正在用blocproc进行尝试,因为必须对每个子矩阵执行一个函数。Thanks要访问每个子矩阵中的数据,请使用:output{cell_row,cell_column}(row_number,column_number),然后可以对该单元格执行操作。或者使用输出{cell_row,cell_column}获取3x3矩阵中的数据。再次感谢@dean_sh,我得到了。没问题。祝你好运吧!