查看: 151|回复: 12|关注: 0

[已答复] matlab cell对角拼接

[复制链接]

新手

12 麦片

财富积分


050


18

主题

86

帖子

1

最佳答案
  • 关注者: 1
发表于 2019-10-10 20:20:33 | 显示全部楼层 |阅读模式
有个问题需要请教一下大家:若a为5*2cell数组,每一个cell里面都是3*3的矩阵。
每一次都会得到一个a。
需要循环三次,将这三次得到的a,进行对角拼接,存储在一个数组里面,假设为b,这里需要b为15*6的cell数组。

尝试了很多办法,都没有成功实现,大家有什么建议吗,谢谢

MATLAB 基础讨论
版块优秀回答者

中级

902 麦片

财富积分


5001500


0

主题

1493

帖子

196

最佳答案
  • 关注者: 35
发表于 2019-10-10 20:36:18 | 显示全部楼层
不太明白你的意思,是要这样吗?!
a{1,1}={[1 2 3;3 4 5];[2 3 4; 2 3 2]};
a{2,2}={[1 2 3;3 4 6];[2 3 4; 2 3 2]};
a{3,3}={[1 2 3;3 4 7];[2 3 4; 2 3 2]};

新手

12 麦片

财富积分


050


18

主题

86

帖子

1

最佳答案
  • 关注者: 1
 楼主| 发表于 2019-10-10 21:03:09 | 显示全部楼层
WarnerChang 发表于 2019-10-10 20:36
不太明白你的意思,是要这样吗?!
a{1,1}={[1 2 3;3 4 5];[2 3 4; 2 3 2]};
a{2,2}={[1 2 3;3 4 6];[2 3 4 ...

如图所示。
不是想得到3*3的cell数组。
TIM截图20191010210015.jpg

MATLAB 基础讨论
版块优秀回答者

中级

902 麦片

财富积分


5001500


0

主题

1493

帖子

196

最佳答案
  • 关注者: 35
发表于 2019-10-11 09:29:14 | 显示全部楼层
水手张 发表于 2019-10-10 21:03
如图所示。
不是想得到3*3的cell数组。

a{1,1,1}={[1 2 3;3 4 5];[2 3 4; 2 3 2]};
a{1,2,1}={[1 2 3;3 4 6];[2 3 4; 2 3 2]};
a{2,1,1}={[1 2 3;3 5 6];[2 3 4; 2 3 2]};
a{2,2,1}={[2 2 3;3 4 6];[2 3 4; 2 3 2]};

a{1,1,2}={[1 2 3;3 4 5];[2 3 4; 2 3 3]};
a{1,2,2}={[1 2 3;3 4 6];[2 3 4; 2 3 3]};
a{2,1,2}={[1 2 3;3 5 6];[2 3 4; 2 3 32]};
a{2,2,2}={[2 2 3;3 4 6];[2 3 4; 2 3 32]};

EndMat=diagCell(a);

function EndMat=diagCell(A)
EndMat=cell(size(A,1)*size(A{1,1,1}{1},1)*size(A,3),size(A,2)*size(A{1,1,1}{1},2)*size(A,3));

for kk=1:size(A,3)
    mm=-1;
    for ii=1:size(A{1,1,1}{1},1)
        nn=-1;
        for jj=1:size(A{1,1,1}{2},2)
%              EndMat{size(A{1,1,1}{1},1)*kk+mm,size(A{1,1,1}{2},2)*kk+nn}=A{ii,jj,kk};%关键在于元素的分配问题;
             nn=nn+1;
        end
        mm=mm+1;
    end
end

end
我的思想先分配cell空数组,在填写元素!关键在于元素的分配问题!我没想好怎么做,只有靠你自己啦!

新手

12 麦片

财富积分


050


18

主题

86

帖子

1

最佳答案
  • 关注者: 1
 楼主| 发表于 2019-10-11 17:03:11 | 显示全部楼层
WarnerChang 发表于 2019-10-11 09:29
a{1,1,1}={[1 2 3;3 4 5];[2 3 4; 2 3 2]};
a{1,2,1}={[1 2 3;3 4 6];[2 3 4; 2 3 2]};
a{2,1,1}={[1 2 3 ...

非常感谢!
昨天想到了一种笨方法:
循环j、k来计算a{j,k},外加循环i,通过判断 i 的值,确定cell里面数组开始的位置。
  1. for i = 1:3
  2.     for j=1:5
  3.         for k = 1:2
  4.             if i == 1
  5.                 a{j,k} =ones(3,3);
  6.             else
  7.                 a{j+(i-1)*5,k+(i-1)*2)} =ones(3,3);
  8.             end
  9.         end
  10.     end
  11. end
复制代码

MATLAB 基础讨论
版块优秀回答者

中级

902 麦片

财富积分


5001500


0

主题

1493

帖子

196

最佳答案
  • 关注者: 35
发表于 2019-10-11 17:06:44 | 显示全部楼层
水手张 发表于 2019-10-11 17:03
非常感谢!
昨天想到了一种笨方法:
循环j、k来计算a{j,k},外加循环i,通过判断 i 的值,确定cell里面数 ...

我还是不太明白,:'(

可是你的a都是一个名字,怎么放到cell中呢?不应该把所有a合成为三维数组,在处理吗?

新手

12 麦片

财富积分


050


18

主题

86

帖子

1

最佳答案
  • 关注者: 1
 楼主| 发表于 2019-10-11 17:30:53 | 显示全部楼层
本帖最后由 水手张 于 2019-10-11 17:36 编辑
WarnerChang 发表于 2019-10-11 17:06
我还是不太明白,

可是你的a都是一个名字,怎么放到cell中呢?不应该把所有a合成为三维数组,在处理 ...

---------------------------------

新手

12 麦片

财富积分


050


18

主题

86

帖子

1

最佳答案
  • 关注者: 1
 楼主| 发表于 2019-10-11 17:35:53 | 显示全部楼层
WarnerChang 发表于 2019-10-11 17:06
我还是不太明白,

可是你的a都是一个名字,怎么放到cell中呢?不应该把所有a合成为三维数组,在处理 ...

我贴出的代码只是demo示意,得到的三个5*2的cell  a  要往b中存。:lol
依次确定cell 15*6 b的位置就好办了,将a中的cell数组取出存储在b中的相应位置。
我描述的不太清楚:lol

MATLAB 基础讨论
版块优秀回答者

中级

902 麦片

财富积分


5001500


0

主题

1493

帖子

196

最佳答案
  • 关注者: 35
发表于 2019-10-11 17:39:04 | 显示全部楼层
水手张 发表于 2019-10-11 17:35
我贴出的代码只是demo示意,得到的三个5*2的cell  a  要往b中存。
依次确定cell 15*6 b的位置就好办 ...

嗷嗷,我明白了,你就是先将单一的一个cell处理出来,然后在放置到另一个cell中是吧!这问题确实有难度!:lol

MATLAB 基础讨论
版块优秀回答者

入门

101 麦片

财富积分


50500


0

主题

84

帖子

21

最佳答案
  • 关注者: 2
发表于 7 天前 | 显示全部楼层
本帖最后由 alvinlau 于 2019-10-12 08:23 编辑

元胞的赋值直接插就是了
约定第i次生成的a为f(i),a为x*y的元胞
  1. clear
  2. [x,y]=size(a);
  3. queue=3;
  4. %%
  5. b=cell(queue*x,queue*y);
  6. for i=1:queue
  7.     b((i-1)*x+1:i*x,(i-1)*y+1:i*y)=f(i);
  8. end
复制代码

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /3 下一条

快速回复 返回顶部 返回列表