欢迎提供一些关于如何构造大型块对角矩阵的基本帮助。最好使用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)
型
我能得到一些帮助如何以一种可以理解的方式做到这一点吗?
1条答案
按热度按时间8nuwlpux1#
block_diag
需要一个矩阵的 * 序列 * 作为它的第一个输入(参见the documentation)。在第一行中,(A for _ in range(N))
创建一个生成器表达式(注意,代码中的括号来自函数调用,生成器表达式是在其中自动创建的。表达式本身需要括号)。在第二行,你基本上传递了三个参数给
block_diag
:k
,(A for _ in range(N))
和k
再次作为第三个参数。你需要合并。有几种方法可以做到这一点:[k] + list(A for _ in range(N)) + [k]
个[k, *[A for _ in range(N)], k]
个可能还有一些变体,后者使用列表解包来为列表创建多个参数。
所以我最后
字符串