公告:本站正式转型为非交互式静态网站! 转型:本站将通过笔记和博客的形式继续为大家服务,关于 Mathematica 问答服务请移步至QQ群:365716997。 联系:如有问题请联系QQ群管理员,或发送邮件至:lixuan.xyz@qq.com。 感谢:最后非常感谢大家多年来的支持与帮助! 参考:《互联网跟帖评论服务管理规定》《中华人民共和国网络安全法》《网络信息内容生态治理规定》《互联网用户账号信息管理规定》
—— 2022-11-27
欢迎来到 Mathematica 问答社区
● 提问时请贴上文本代码
● 语法高亮:在编辑器中点击
● 被禁止的话题:广告,破解
● 请阅读:《提问的智慧》
● 备用域名:mma.ooo
● 支持LaTex数学公式: 行内公式标识符:\$ 或“$\backslash ($”+“$\backslash )$”, 行间公式标识符:\$\$ 或 “$\backslash [$”+“$\backslash ]$”
● 社区建议QQ群:365716997
538 问题
531 回答
1.5k 留言
229 用户
有什么可以快速生成下面矩阵的办法吗,就是想通过输入分块矩阵合成一个大的矩阵。
主要使用 ArrayFlatten,配合使用 DiagonalMatrix,可以简化点儿。
m1 = {{1, 2}, {3, 4}}; m2 = {{1, 2, 3}, {4, 5, 6}}; m3 = {{1, 2}, {3, 4}, {5, 6}}; m4 = {{1}}; mm = Hold /@ {m1, m2, m3, m4};(*Hold函数,让DiagonalMatrix把mm当成一维列表*) m = ArrayFlatten[ReleaseHold[DiagonalMatrix[mm]]];(*拼接分块矩阵*) m // MatrixForm
这种情况其实更适合用SparseArray:
mat = SparseArray[Band[{1, 1}] -> {m1, m2, m3, m4}];
直接ArrayFlatten就好啦~ m1={{1,2},{3,4}}; m2={{1,2,3},{4,5,6},{7,8,9}}; m3={{1}}; m4={{1,2,3},{4,5,6}}; m5={{1,2},{3,4},{5,6}}; ArrayFlatten[{{m1,0,0},{0,m2,0},{0,0,m3}}]//MatrixForm ArrayFlatten[{{m1,0,0},{0,m4,0},{0,0,m5}}]//MatrixForm
m1 = {{1, 2}, {3, 4}}; m2 = {{1, 2, 3}, {4, 5, 6}}; m3 = {{1, 2}, {3, 4}, {5, 6}}; m4 = {{1}}; DiagonalMatrix[Unevaluated@{m1, m2, m3, m4}] //ArrayFlatten // MatrixForm
https://mathematica.stackexchange.com/a/19779/21532