Python 如何获得没有括号的输出?
我用SageMath编写了以下代码来生成多项式方程的随机系统Python 如何获得没有括号的输出?,python,python-3.x,sage,Python,Python 3.x,Sage,我用SageMath编写了以下代码来生成多项式方程的随机系统 def quad_polynomial(field, n, m): Polynomial_Ring1 = PolynomialRing(K, ['x%s'%p for p in range(1, n + 1)]) x1 = Polynomial_Ring1.gens() gen_Polynomial_Ring1 = matrix(x1) list_of_quadratic_part = [0 for i
def quad_polynomial(field, n, m):
Polynomial_Ring1 = PolynomialRing(K, ['x%s'%p for p in range(1, n + 1)])
x1 = Polynomial_Ring1.gens()
gen_Polynomial_Ring1 = matrix(x1)
list_of_quadratic_part = [0 for i in range(m)]
for i in range(m):
list_of_quadratic_part[i] = gen_Polynomial_Ring1 * (random_matrix(K, n)) * gen_Polynomial_Ring1.transpose()
# print(list_of_quadratic_part[i])
return list_of_quadratic_part
def linear_and_constant_terms(field, n, m):
a = []
Polynomial_Ring1 = PolynomialRing(K, ['x%s'%p for p in range(1, n + 1)])
varlist = (list(Polynomial_Ring1.gens()))
v = matrix(varlist)
LandC = [0 for i in range(m)]
for i in range(m):
im1 = matrix([K.random_element() for j in range(n)])
expression = im1 * v.transpose()
LandC[i] = expression
return LandC
def final_expression_F(field, n, m):
final_expression = [0 for i in range(m)]
for i in range(m):
final_expression[i] = quad_polynomial(field, n, m)[i] + linear_and_constant_terms(field, n, m)[i]
return final_expression
当我运行代码时,我得到了方括号中的多项式,这是我不想要的
sage: P = final_expression_F(K, 2, 3)
sage: print(P)
[[(a)*x1^2 + x1*x2 + (a + 1)*x1],
[(a)*x1^2 + (a)*x2^2 + x1 + (a + 1)*x2],
[x1^2 + (a)*x1*x2 + (a)*x2^2 + (a)*x1 + x2]]
我希望我的输出是这样的
[(a)*x1^2 + x1*x2 + (a + 1)*x1,
(a)*x1^2 + (a)*x2^2 + x1 + (a + 1)*x2,
x1^2 + (a)*x1*x2 + (a)*x2^2 + (a)*x1 + x2]
有人能帮忙吗?我在这方面花了太多时间,但我无法解决这个问题
编辑:使用@U11 Forward的答案,我得到了圆括号
sage: P = final_expression_F(K, 2, 3)
sage: P = [j for i in P for j in i]
sage: print(P)
[((a + 1)*x1*x2 + x2^2 + (a + 1)*x1 + (a + 1)*x2),
((a + 1)*x1 + (a)*x2),
((a + 1)*x1^2 + (a)*x1*x2 + x2^2 + (a + 1)*x1 + (a)*x2)]
您正在打印列表列表。您需要将列表展平:
print([j for i in P for j in i])
您正在打印列表列表。您需要将列表展平:
print([j for i in P for j in i])
在
最终表达式\u F
函数的最后一行,尝试更改它:
return final_expression
致:
在
最终表达式\u F
函数的最后一行,尝试更改它:
return final_expression
致:
以下内容以更自然的方式完成整个工作。当简单的最终列表理解解决了问题时,始终使用参数
m
是没有意义的。下面是匿名变量。
。(你的字段
和K
变量在OP中并不是固定不变的。我会按照我认为有意义的方式来做。)
这一次,上述内容提供了:
sage: P
[2*x1^2 - x1*x2 - 1/2*x1 + x2 - 1,
-2*x1^2 - 2*x1*x2 + 2*x2^2 - 1/2*x1 + x2 - 1,
x1*x2 + 2*x2^2 - 2*x1]
sage:
该结果的条目是n
变量中的二次随机多项式,也包括常数项。(来自1x1随机矩阵。)
注意:在例程
四次多项式的返回值中,它的形状是(…)[0,0]
,注意部分(…)
是一个1x1矩阵,为了提取它的一个也是唯一的条目,我们使用[0,0]
,下面以更自然的方式完成整个工作。当简单的最终列表理解解决了问题时,始终使用参数m
是没有意义的。下面是匿名变量。
。(你的字段
和K
变量在OP中并不是固定不变的。我会按照我认为有意义的方式来做。)
这一次,上述内容提供了:
sage: P
[2*x1^2 - x1*x2 - 1/2*x1 + x2 - 1,
-2*x1^2 - 2*x1*x2 + 2*x2^2 - 1/2*x1 + x2 - 1,
x1*x2 + 2*x2^2 - 2*x1]
sage:
该结果的条目是n
变量中的二次随机多项式,也包括常数项。(来自1x1随机矩阵。)
注意:在例程四次多项式的返回值中,它的形状是(…)[0,0]
,注意部分(…)
是一个1x1矩阵,为了提取它的唯一条目,我们使用[0,0]
三种方法重写函数,从@dan\u fulea的深刻答案开始
我们可以直接产生一个标量(而不是产生
1x1矩阵并提取其单个条目):
def my_random_polymone_a(K,n):
r”“”
返回一个随机次数多项式≤ 变量'x_1'中的2,…'x_n'超过'K'。
"""
R=多项式环(K,[1..n]]中p的[f'x{p}]
x=向量(R,n,R.gens())
返回(x*随机矩阵(K,n,n)*x
+随机向量(K,n)*x
+K.随机元素()
我们可以避免矩阵和向量,直接选择多项式的
n(n+1)/2
系数作为随机场元素(前面的方法
拾取的n^2+n+1
随机场元素):
def my_random_polymone_b(K,n):
r”“”
返回一个随机次数多项式≤ 2在'x_1'中,…'x_n'在'K'上。
"""
R=多项式环(K,[1..n]]中p的[f'x{p}]
xx=(R.one(),)+R.gens()
r=K.随机单元
返回和((r()*x*y代表k,x在枚举中(xx)代表y在xx[k:],r.zero())
我们可以从(单项式,系数)对字典中生成多项式,
使用Sage的IntegerVectors
枚举可接受的单项式:
def my_random_polymonent_c(K,n):
r”“”
返回一个随机次数多项式≤ 2在'x_1'中,…'x_n'在'K'上。
"""
R=多项式环(K,[1..n]]中p的[f'x{p}]
r=K.随机单元
返回R({tuple(v):范围(3)中的d的R(),整数向量(d,n)})
示例:3次随机多项式的列表≤ 2在x1
,x2
上ℤ.
使用my\u random\u polymonal\u a
:
sage:P=[my_random_polymonent_a(ZZ,2)表示范围(3)]
鼠尾草:P
[3*x1^2+6*x1*x2-x2^2+x1-x2,
-4*x1^2+3*x1*x2+x2^2-4*x2+1,
-28*x1^2+9*x1*x2+2*x1+x2-3]
使用my\u random\u polymone\u b
:
sage:P=[my_random_polymonent_b(ZZ,2)表示范围(3)]
鼠尾草:P
[x1^2+x1*x2+11*x2^2-2*x1+x2+1,
2*x1^2-3*x1*x2-x2^2-x1-6*x2+1,
-16*x1*x2-x2^2-2*x2-1]
使用my\u random\u polymone\u c
:
sage:P=[my_random_polymonent_c(ZZ,2)表示范围(3)]
鼠尾草:P
[-8*x1^2-x2^2-12*x1+7*x2-6,
2*x1^2+x1*x2-2*x2^2+2*x1+120*x2+1,
-2*x1*x2-x2^2-2*x1+1]
从@dan_fulea富有洞察力的回答开始,有三种重写函数的方法
我们可以直接产生一个标量(而不是产生
1x1矩阵并提取其单个条目):
def my_random_polymone_a(K,n):
r”“”
返回一个随机次数多项式≤ 变量'x_1'中的2,…'x_n'超过'K'。
"""
R=多项式环(K,[1..n]]中p的[f'x{p}]
x=向量(R,n,R.gens())
返回(x*随机矩阵(K,n,n)*x
+随机向量(K,n)*x
+K.随机元素()
我们可以避免矩阵和向量,直接选择多项式的
n(n+1)/2
系数作为随机场元素(前面的方法
拾取的n^2+n+1
随机场元素):
def my_random_polymone_b(K,n):
r”“”
返回一个随机次数多项式≤ 2在'x_1'中,…'x_n'在'K'上。
"""
R=多项式环(K,[1..n]]中p的[f'x{p}]
xx=(R.one(),)+R.gens()
r=K.随机单元
返回和((r()*x*y代表k,x在枚举中(xx)代表y在xx[k:],r.zero())