scipy 在Python中使用循环创建块对角矩阵

kmbjn2e3  于 5个月前  发布在  Python
关注(0)|答案(1)|浏览(74)

欢迎提供一些关于如何构造大型块对角矩阵的基本帮助。最好使用Python中的block_diag函数来解决这个问题。
我想构造两个矩阵:一个是diag(A,A. A)形式,另一个是diag(k,A,A. A,k)形式,其中A是一个2 × 2矩阵,k是一个真实的数。这两个矩阵应该有相同的大小,我想给予一个输入N来表示我想要多少个A。
到目前为止,这段代码工作正常(虽然我不知道它到底做了什么;如果我只是使用block_diag,它似乎不工作):

me = sparse.block_diag(A for _ in range(int(N)))

字符串
这样做第二个矩阵会出错(根据我如何放置括号,比如'expression should be paranthesized'或'int object is not iterable'):

mo = sparse.block_diag(k,A for _ in range(int(N)),k)


我能得到一些帮助如何以一种可以理解的方式做到这一点吗?

8nuwlpux

8nuwlpux1#

block_diag需要一个矩阵的 * 序列 * 作为它的第一个输入(参见the documentation)。在第一行中,(A for _ in range(N))创建一个生成器表达式(注意,代码中的括号来自函数调用,生成器表达式是在其中自动创建的。表达式本身需要括号)。
在第二行,你基本上传递了三个参数给block_diagk(A for _ in range(N))k再次作为第三个参数。你需要合并。有几种方法可以做到这一点:

  • [k] + list(A for _ in range(N)) + [k]
  • [k, *[A for _ in range(N)], k]

可能还有一些变体,后者使用列表解包来为列表创建多个参数。
所以我最后

mo = scipy.sparse.block_diag([k, *[A for _ in range(N)], k])

字符串

相关问题