使用linalg.block_diag表示可变数量的块

时间:2015-01-22 18:10:09

标签: python numpy matrix scipy parameter-passing

所以我有一个生成各种矩阵的代码。这些矩阵需要存储在块对角矩阵中。这应该是相当简单的,因为我可以使用scipy的:

scipy.linalg.block_diag(*arrs)

然而我遇到的问题是我不知道需要存储多少个矩阵。我希望尽可能简单地保持事物(自然)。我想做类似的事情:

scipy.linalg.block_diag( matrix_list[ii] for ii in  range(len(matrix_list)) )

但这不起作用。我可以想到其他一些方法来做到这一点......但是对于我认为应该更简单的事情,它们都变得非常复杂。

有没有人有想法(或知道)一种简单的方法来实现这一目标?

提前致谢!

1 个答案:

答案 0 :(得分:3)

当你这样做时:

scipy.linalg.block_diag( matrix_list[ii] for ii in  range(len(matrix_list)) )

您将生成器表达式传递给block_diag,这不是使用它的方式。

相反,使用* opertor来扩展函数调用中的参数列表,如:

scipy.linalg.block_diag(*matrix_list)