我想创建n x n矩阵,其中n是一个大数字,在sage中执行此操作的最快方法是什么?
我想要一个像n = 3 == [(3,3,3)(3,3,3),(3,3,3)]
这样的矩阵
我目前用ones_matrix(n) * somenumber
这样做
然而,这需要一段时间与一个大的n,有一个更快的方式在圣人这样做吗?
谢谢你的帮助
您可以像这样使用numpy.full()
函数:
>>> import numpy as np
>>> arr = np.full((3, 3), 3)
>>> arr
[[3 3 3]
[3 3 3]
[3 3 3]]
>>> arr2 = np.full((3, 3), 7)
>>> arr2
[[7 7 7]
[7 7 7]
[7 7 7]]
一种捷径是:
n=int(input())
tup=tuple((n,))*n
#gives (n,n,n,...…,n) n times
ar=list((tup,)*n)
#would give ar=[(n,n,.....,n),(n,n,n,.....,n),...…..(n,n,n,...…,n)]
或者一蹴而就:ar=list((tuple((n,))*n,)*n)
如果您想使用Sage矩阵,您可以这样做:
sage: M = MatrixSpace(ZZ, 10000, 10000)
sage: a = M.matrix([3]*10000*10000)
在我的电脑上,这需要大约6秒,与ones_matrix(10000)
相同,比3 * ones_matrix(10000)
快。不像numpy
解决方案那么快,但结果是Sage矩阵。请注意,如果要使用非整数条目,则应将ZZ
更改为相应的环。