sag中矩阵元的条件定义

2024-09-28 20:41:41 发布

您现在位置:Python中文网/ 问答频道 /正文

在Sage中,试图通过以下方式定义一个矩阵,其中包含单元格的条件:

matrix([[(if gcd(i, j) == 0: log(radical((i+j)*i*j)) else: -1.0) for j in srange(1, 5)] for i in srange(1, 5)])

我得到一个语法错误:

...
matrix([[(if gcd(i, j) == _sage_const_0 : log(radical((i+j)*i*j)) else: -_sage_const_1p0 ) for j in srange(_sage_const_1 , _sage_const_5 )] for i in srange(_sage_const_1 , _sage_const_5 )])
           ^
SyntaxError: invalid syntax

这里有什么问题?怎么解决?你知道吗


Tags: inlogforif定义方式矩阵else
2条回答

你的问题是Python的问题,真的,不是Sage本身。Python对列表理解有一些过滤,但看起来不是这样的。参见例如this question。你知道吗

所以let's try it

matrix([[log(radical((i+j)*i*j)) if gcd(i,j)==0 else -1.0 for j in srange(1,5)] for i in srange(1,5)])

顺便问一下,你真的想要if gcd(i,j)==1?你不可能在这一次得到零的gcd!你知道吗

这是另一种可能性。你知道吗

sage: f = lambda i, j: log(radical((i + j)*i*j)) if gcd(i,j) == 1 else -1
sage: m = matrix(SR, 4, lambda i, j: f(i + 1, j + 1))
sage: m
[ log(2)  log(6)  log(6) log(10)]
[ log(6)      -1 log(30)      -1]
[ log(6) log(30)      -1 log(42)]
[log(10)      -1 log(42)      -1]

这对矩阵初始化使用了不同的语法,其中 首先指定基环、矩阵大小,然后指定函数 系数的(i, j)。注意,由于Sage索引行和 来自0的列,我们必须将函数应用于i + 1j + 1。你知道吗

-1放在非互质(i, j)上可能比-1.0效果更好 精确计算。你知道吗

相关问题 更多 >