如何在 sagemath 中使用 if 和 for 循环定义矩阵?
How to define a matrix using if and for loops in sagemath?
我正在使用 sagemath 进行计算。
现在,我从 R 获得了代码,可以根据以下代码生成大小为 $2r\times 2r$ 的矩阵..
n=10
k=10
r=5
x=matrix(data=NA, nrow=n, ncol=k)
for(j in 1:k){
for(i in 1:n){
if (i==j){x[i,j]=0}
if ((i<=r)&(i<j)&(j<=r)) {x[i,j]=2}
if ((i<=r)&(i>j)&(j<=r)) {x[i,j]=2}
if ((i<=r)&(j>r)){x[i,j]=1}
if ((i>r)&(j<=r)) {x[i,j]=1}
if ((i>r)&(j>r)){x[i,j]=0}
if ((i>r)& (i<j) &(j>r)){x[i,j]=2}
if ((i>r)& (i>j) &(j>r)){x[i,j]=2}
}
}
x
如何在 SageMath 中执行相同的操作?
当 constructing a matrix in Sagemath 时,您可以传入一个计算其条目的函数,这消除了显式(通常效率低下的)循环的需要。此函数在下面定义为 xentries
:我使用了与您的 post 中相同的条件,但为了便于阅读将它们分组。
def xentries(i, j, r):
if i == j or (i > r and j > r):
return 0
if (i <= r and j > r) or (i > r and j <= r):
return 1
return 2
n = 10
k = 10
r = 5
x = matrix(ZZ, n, k, lambda i, j: xentries(i, j, r))
这里,ZZ表示整数,用来表示矩阵中有整数项。可以是理性的QQ,也可以是真实的RR。其他参数是矩阵的大小,以及构造其条目的函数。矩阵 x 现在如下:
[0 2 2 2 2 2 1 1 1 1]
[2 0 2 2 2 2 1 1 1 1]
[2 2 0 2 2 2 1 1 1 1]
[2 2 2 0 2 2 1 1 1 1]
[2 2 2 2 0 2 1 1 1 1]
[2 2 2 2 2 0 1 1 1 1]
[1 1 1 1 1 1 0 0 0 0]
[1 1 1 1 1 1 0 0 0 0]
[1 1 1 1 1 1 0 0 0 0]
[1 1 1 1 1 1 0 0 0 0]
我正在使用 sagemath 进行计算。
现在,我从 R 获得了代码,可以根据以下代码生成大小为 $2r\times 2r$ 的矩阵..
n=10
k=10
r=5
x=matrix(data=NA, nrow=n, ncol=k)
for(j in 1:k){
for(i in 1:n){
if (i==j){x[i,j]=0}
if ((i<=r)&(i<j)&(j<=r)) {x[i,j]=2}
if ((i<=r)&(i>j)&(j<=r)) {x[i,j]=2}
if ((i<=r)&(j>r)){x[i,j]=1}
if ((i>r)&(j<=r)) {x[i,j]=1}
if ((i>r)&(j>r)){x[i,j]=0}
if ((i>r)& (i<j) &(j>r)){x[i,j]=2}
if ((i>r)& (i>j) &(j>r)){x[i,j]=2}
}
}
x
如何在 SageMath 中执行相同的操作?
当 constructing a matrix in Sagemath 时,您可以传入一个计算其条目的函数,这消除了显式(通常效率低下的)循环的需要。此函数在下面定义为 xentries
:我使用了与您的 post 中相同的条件,但为了便于阅读将它们分组。
def xentries(i, j, r):
if i == j or (i > r and j > r):
return 0
if (i <= r and j > r) or (i > r and j <= r):
return 1
return 2
n = 10
k = 10
r = 5
x = matrix(ZZ, n, k, lambda i, j: xentries(i, j, r))
这里,ZZ表示整数,用来表示矩阵中有整数项。可以是理性的QQ,也可以是真实的RR。其他参数是矩阵的大小,以及构造其条目的函数。矩阵 x 现在如下:
[0 2 2 2 2 2 1 1 1 1]
[2 0 2 2 2 2 1 1 1 1]
[2 2 0 2 2 2 1 1 1 1]
[2 2 2 0 2 2 1 1 1 1]
[2 2 2 2 0 2 1 1 1 1]
[2 2 2 2 2 0 1 1 1 1]
[1 1 1 1 1 1 0 0 0 0]
[1 1 1 1 1 1 0 0 0 0]
[1 1 1 1 1 1 0 0 0 0]
[1 1 1 1 1 1 0 0 0 0]