我可以通过求解这些方程式获得字典列表吗? (Python)
Can I have a list of dictionaries from solving these equations? (Python)
这是我正在处理的部分代码:
delta, beta, gamma = symbols('delta beta gamma')
eq1 = Eq(tan((delta+beta)/2),nz*tan(theta/2))
eq2 = Eq(tan((delta-beta)/2),nx/ny)
eq3 = Eq(cos(gamma/2),cos(theta/2)/cos((delta+beta)/2))
result = solve([eq1, eq2, eq3], [delta, beta,gamma])
给出所有参数:
theta = -1.2974951599797855
nx = - 0.280639152149670
ny = 0.546816938693111
nz = 0.788817407160244
没有等式 3,输出如下:
{delta: -1.01319515173894, beta: -0.0648548698337719}
由于 gamma
有两个值,使用等式 3,输出变为
[(-1.01319515173894, -0.0648548698337719, 0.760927675576123),
(-1.01319515173894, -0.0648548698337719, 11.8054429387830)]
关于这个结果我有两个问题:首先,有没有办法让输出看起来像一个包含两个字典的列表?如:
[{delta: -1.01319515173894, beta: -0.0648548698337719, gamma: 0.760927675576123},
{delta:-1.01319515173894, beta: -0.0648548698337719, gamma: 11.8054429387830}]
此外,通过使用 solve
,我应该只获得主要的 angular 值吗?我想知道是否可以让 gamma
的第二个值是 -0.760927675576123
,而不是 11.8054429387830
.
非常感谢您的帮助:)
这是将元组列表转换为字典列表的方法。要固定 -pi 和 pi 之间的间隔,您可以在输出中获得的每个角度上使用 math.remainder(radian, tau)
(其中 tau 是 2pi)。
from math import remainder, tau
#Output radians
output = [(-1.01319515173894, -0.0648548698337719, 0.760927675576123),
(-1.01319515173894, -0.0648548698337719, 11.8054429387830)]
#Fix intervals between -pi and pi
fix_interval = [[remainder(j, tau) for j in i] for i in output]
#Convert to dictionary
dict_output = [{'delta':i,'beta':j,'gamma':k} for i,j,k in fix_interval]
dict_output
[{'delta': -1.01319515173894,
'beta': -0.0648548698337719,
'gamma': 0.760927675576123},
{'delta': -1.01319515173894,
'beta': -0.0648548698337719,
'gamma': -0.7609276755761716}]
当然,您可以一步完成所有操作,但我已尝试将其作为一个单独的步骤,以便您更容易理解其工作原理。
这是我正在处理的部分代码:
delta, beta, gamma = symbols('delta beta gamma')
eq1 = Eq(tan((delta+beta)/2),nz*tan(theta/2))
eq2 = Eq(tan((delta-beta)/2),nx/ny)
eq3 = Eq(cos(gamma/2),cos(theta/2)/cos((delta+beta)/2))
result = solve([eq1, eq2, eq3], [delta, beta,gamma])
给出所有参数:
theta = -1.2974951599797855
nx = - 0.280639152149670
ny = 0.546816938693111
nz = 0.788817407160244
没有等式 3,输出如下:
{delta: -1.01319515173894, beta: -0.0648548698337719}
由于 gamma
有两个值,使用等式 3,输出变为
[(-1.01319515173894, -0.0648548698337719, 0.760927675576123),
(-1.01319515173894, -0.0648548698337719, 11.8054429387830)]
关于这个结果我有两个问题:首先,有没有办法让输出看起来像一个包含两个字典的列表?如:
[{delta: -1.01319515173894, beta: -0.0648548698337719, gamma: 0.760927675576123},
{delta:-1.01319515173894, beta: -0.0648548698337719, gamma: 11.8054429387830}]
此外,通过使用 solve
,我应该只获得主要的 angular 值吗?我想知道是否可以让 gamma
的第二个值是 -0.760927675576123
,而不是 11.8054429387830
.
非常感谢您的帮助:)
这是将元组列表转换为字典列表的方法。要固定 -pi 和 pi 之间的间隔,您可以在输出中获得的每个角度上使用 math.remainder(radian, tau)
(其中 tau 是 2pi)。
from math import remainder, tau
#Output radians
output = [(-1.01319515173894, -0.0648548698337719, 0.760927675576123),
(-1.01319515173894, -0.0648548698337719, 11.8054429387830)]
#Fix intervals between -pi and pi
fix_interval = [[remainder(j, tau) for j in i] for i in output]
#Convert to dictionary
dict_output = [{'delta':i,'beta':j,'gamma':k} for i,j,k in fix_interval]
dict_output
[{'delta': -1.01319515173894,
'beta': -0.0648548698337719,
'gamma': 0.760927675576123},
{'delta': -1.01319515173894,
'beta': -0.0648548698337719,
'gamma': -0.7609276755761716}]
当然,您可以一步完成所有操作,但我已尝试将其作为一个单独的步骤,以便您更容易理解其工作原理。