python申请超大矩阵_Python:一个非常大的矩阵的简化行梯队形式(modp)

通过使用gmpy2.divm替换您的division_mod,我可以节省几秒钟的运行时间。我无法做出任何其他重大的改进。下面的程序创建一个随机的100×2^15矩阵,并在大约3分钟内计算出行梯队形式,并消耗425MB内存。在import gmpy2

bits = 256

r = 100

c = 2**15

p = gmpy2.next_prime(2**bits - 1234)

seed = gmpy2.random_state(42)

M = []

for i in range(r):

M.append([gmpy2.mpz_urandomb(seed, bits) for j in range(c)])

def row_echelon_form(M, p):

lead = 0

rowCount = len(M)

columnCount = len(M[0])

for r in range(rowCount):

if lead >= columnCount:

return

i = r

while M[i][lead] == 0:

i += 1

if i == rowCount:

i = r

lead += 1

if columnCount == lead:

return

M[i],M[r] = M[r],M[i]

lv = M[r][lead]

M[r] = [ gmpy2.divm(mrx, lv, p) for mrx in M[r]]

for i in range(rowCount):

if i != r:

lv = M[i][lead]

M[i] = [ (iv - lv*rv) % p for rv,iv in zip(M[r],M[i])]

lead += 1

return M

N = row_echelon_form(M, p)

如果您的内存使用量增长超过大约500MB,则您的gmpy2版本中可能存在内存泄漏。或者我错误地解释了您的需求,而矩阵明显更大。在

免责声明:我维护gmpy2。在

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值