构造一个定义有不定数量参数的矩阵
Constructing a matrix defined with an indefinite number of parameters
我正在尝试获取值矩阵。我首先尝试解释(希望清楚)矩阵需要如何组成。该矩阵由具有不定数量参数的子矩阵构成。
例如,我插入一个只有 3 个参数的子矩阵:
a1, a2, a3, b1, b2, b3
根据这些值,我想构建一个类型的矩阵:
[['a1', 'a2', 'a3'],
['b1', 'a2', 'a3'],
['a1', 'b2', 'a3'],
['a1', 'a2', 'b3']]
从第二行开始,我将有一条对角线值 b。
我的目标是创建一个脚本,它可以根据传递的参数数量从子矩阵构建到矩阵,但遵循相同的逻辑。
我构建了一个示例字典:
RDesign = {
"par1" : {"a": ["a11", "a12", "a13"],
"b": ["b11", "b12", "b13"]},
"par2" : {"a": ["a21", "a22", "a23"],
"b": ["b21", "b22", "b23"]},
"par3" : {"a": ["a31", "a32", "a33"],
"b": ["b31", "b32", "b33"]},
}
这本字典与我正在使用的字典相似,它显示 a1 和 b1 是同一参数 (par1) 值的一部分。这对我要求的目的来说并不重要。
在这个示例中,我有 3 个参数(par1、par2、par3),它们被分配了两个类别的值“a”和“b”。该示例包含多个值(a11、a12 等),但为简单起见,我将只考虑第一个 [0](a11、b11、b21 ... b31)。
此函数生成子矩阵的值:
def submat(dict_):
sub_matrix = []
for key in dict_:
A = dict_[key]["a"][0]
sub_matrix.append(A)
for key in dict_:
B = dict_[key]["b"][0]
sub_matrix.append(B)
return sub_matrix
sub_M = submat(RDesign)
sub_M
Out[84]: ['a11', 'a21', 'a31', 'b11', 'b21', 'b31']
为了阐明我想要达到的结果,因此我通过“手动”输入值创建了一个数组。
iteration = [[sub_M[0], sub_M[1], sub_M[2]],
[sub_M[3], sub_M[1], sub_M[2]],
[sub_M[0], sub_M[4], sub_M[2]],
[sub_M[0], sub_M[1], sub_M[5]]]
所以最终结果应该是这样的:
iteration
Out[85]:
[['a11', 'a21', 'a31'],
['b11', 'a21', 'a31'],
['a11', 'b21', 'a31'],
['a11', 'a21', 'b31']]
目标是以自动方式创建这种类型的矩阵,并且在传递多个参数时也遵循相同的逻辑。我希望我已经说清楚了,但我准备修改消息以尝试更好地解释它。
逻辑并不完全清楚,但要从 sub_M
列表中获取最终输出,您可以使用:
import numpy as np
sub_M = ['a11', 'a21', 'a31', 'b11', 'b21', 'b31']
N = 3 # half size of sub_M, can be computed as len(sub_M)//2
a = np.tile(sub_M[:N], (N+1,1))
np.fill_diagonal(a, sub_M[N:])
a = np.roll(a, 1, axis=0)
输出:
[['a11' 'a21' 'a31']
['b11' 'a21' 'a31']
['a11' 'b21' 'a31']
['a11' 'a21' 'b31']]
我正在尝试获取值矩阵。我首先尝试解释(希望清楚)矩阵需要如何组成。该矩阵由具有不定数量参数的子矩阵构成。 例如,我插入一个只有 3 个参数的子矩阵:
a1, a2, a3, b1, b2, b3
根据这些值,我想构建一个类型的矩阵:
[['a1', 'a2', 'a3'],
['b1', 'a2', 'a3'],
['a1', 'b2', 'a3'],
['a1', 'a2', 'b3']]
从第二行开始,我将有一条对角线值 b。
我的目标是创建一个脚本,它可以根据传递的参数数量从子矩阵构建到矩阵,但遵循相同的逻辑。
我构建了一个示例字典:
RDesign = {
"par1" : {"a": ["a11", "a12", "a13"],
"b": ["b11", "b12", "b13"]},
"par2" : {"a": ["a21", "a22", "a23"],
"b": ["b21", "b22", "b23"]},
"par3" : {"a": ["a31", "a32", "a33"],
"b": ["b31", "b32", "b33"]},
}
这本字典与我正在使用的字典相似,它显示 a1 和 b1 是同一参数 (par1) 值的一部分。这对我要求的目的来说并不重要。 在这个示例中,我有 3 个参数(par1、par2、par3),它们被分配了两个类别的值“a”和“b”。该示例包含多个值(a11、a12 等),但为简单起见,我将只考虑第一个 [0](a11、b11、b21 ... b31)。
此函数生成子矩阵的值:
def submat(dict_):
sub_matrix = []
for key in dict_:
A = dict_[key]["a"][0]
sub_matrix.append(A)
for key in dict_:
B = dict_[key]["b"][0]
sub_matrix.append(B)
return sub_matrix
sub_M = submat(RDesign)
sub_M
Out[84]: ['a11', 'a21', 'a31', 'b11', 'b21', 'b31']
为了阐明我想要达到的结果,因此我通过“手动”输入值创建了一个数组。
iteration = [[sub_M[0], sub_M[1], sub_M[2]],
[sub_M[3], sub_M[1], sub_M[2]],
[sub_M[0], sub_M[4], sub_M[2]],
[sub_M[0], sub_M[1], sub_M[5]]]
所以最终结果应该是这样的:
iteration
Out[85]:
[['a11', 'a21', 'a31'],
['b11', 'a21', 'a31'],
['a11', 'b21', 'a31'],
['a11', 'a21', 'b31']]
目标是以自动方式创建这种类型的矩阵,并且在传递多个参数时也遵循相同的逻辑。我希望我已经说清楚了,但我准备修改消息以尝试更好地解释它。
逻辑并不完全清楚,但要从 sub_M
列表中获取最终输出,您可以使用:
import numpy as np
sub_M = ['a11', 'a21', 'a31', 'b11', 'b21', 'b31']
N = 3 # half size of sub_M, can be computed as len(sub_M)//2
a = np.tile(sub_M[:N], (N+1,1))
np.fill_diagonal(a, sub_M[N:])
a = np.roll(a, 1, axis=0)
输出:
[['a11' 'a21' 'a31']
['b11' 'a21' 'a31']
['a11' 'b21' 'a31']
['a11' 'a21' 'b31']]