此问题在此处已有答案:
Expanding tuples into arguments(5个答案)
16天前关闭
我有一个函数,可以接受可变数量的参数。我想让另一个函数用一个参数重复n次调用这个函数。具有可变参数的函数是scipy.linalg.block_diag,它创建一个块对角矩阵,其输入沿着对角线。调用block_diag的函数有一个矩阵和该矩阵沿着对角线重复的次数作为参数。以下是我到目前为止所做的:
from scipy.linalg import block_diag
mat = [[0.22463041, 0.97444404, 0.], [0.97444404, -0.22463041, 0.], [ 0., 0., 1.]]
NDim = 7
def block_diagonal_matrix(matrix, NDimen):
"""
This function generates a block diagonal matrix by repeating the input
matrix along the diagonal.
Args:
matrix: The input matrix.
NDimen: The number of times the matrix should be repeated along the
diagonal.
Returns:
BlockDiagMat: The resulting block diagonal matrix obtained by
repeating the input matrix along the diagonal.
"""
BlockDiagMat = block_diag(matrix, matrix, matrix, matrix, matrix, matrix, matrix)
return BlockDiagMat
block_diagonal_matrix(mat, NDim)
字符串
通过在调用block_diag时手动重复矩阵7(NDim)次,我获得了正确的块对角矩阵。但是,我希望有一种方法可以让block_diagonal_matrix函数调用matrix适当的次数。
我试着在函数中调用block_diag:
BlockDiagMat = block_diag(matrix*NDimen)
型
然而,得到的块对角矩阵没有正确的内部维度(期望len(BlockDiagMat [0])为21,得到3)。
我也试着先把矩阵做成一个列表:
BlockDiagMat = block_diag([matrix]*NDimen)
型
但是scipy.linalg.block_diag不支持这个:ValueError:以下位置中的参数的维数大于2:[1][2][3]
然后我尝试使用numpy.ndarray.flatten进行扁平化,但是生成的矩阵没有正确的维度。
这一切都归结为使用block_diagonal_matrix在scipy.linalg.block_diag中调用矩阵n次。
先谢谢你的帮助。
1条答案
按热度按时间stszievb1#
试试这个:
字符串
一般来说,在函数中重复n次参数:
型
首先创建一个包含参数
[arg]
的列表然后将其相乘,使参数的次数正确
[arg]*n
然后将该列表解压缩到函数中,以便实际上将参数作为多个参数提供给函数,而不是单个列表
*[arg]*n