gpt4 book ai didi

python - numpy 更有效的子矩阵

转载 作者:行者123 更新时间:2023-11-28 16:43:56 28 4
gpt4 key购买 nike

目前我正在使用下面的代码来获取删除了第 i 行和第 j 列的子矩阵,但是在分析我的代码之后,它似乎是我代码中的主要瓶颈之一。有没有更有效的方法?

def submatrix(A, i, j):
logger.debug('submatrix(%r, %r, %r)', A, i, j)
B = empty(shape=tuple(x - 1 for x in A.shape), dtype=int)
B[:i, :j] = A[:i, :j]
B[i:, :j] = A[i+1:, :j]
B[:i, j:] = A[:i, j+1:]
B[i:, j:] = A[i+1:, j+1:]
return B

25015049 function calls (24599369 primitive calls) in 44.587 seconds

Ordered by: internal time

ncalls tottime percall cumtime percall filename:lineno(function)
3983040 15.541 0.000 20.719 0.000 defmatrix.py:301(__getitem__)
415680 10.216 0.000 33.069 0.000 hill.py:127(submatrix)
415686/6 3.232 0.000 44.578 7.430 hill.py:112(det)

编辑:Jaime 提供了一种使用正则逆和行列式来近似模逆的好方法,但是对于大基数(在我的例子中是模 256),不准确足以使整个事情变得毫无意义。主要时间槽似乎实际上是 numpy 中的 getitem,但我相信这是由这些行引起的:

    B[:i, :j] = A[:i, :j]
B[i:, :j] = A[i+1:, :j]
B[:i, j:] = A[:i, j+1:]
B[i:, j:] = A[i+1:, j+1:]

瓶颈可能不是在内存中复制矩阵,而是矩阵条目访问。

最佳答案

嗯...你只是在复制矩阵,所以可能很难加快速度,但你可以尝试的一件事是验证 A 是否在连续的内存块中,这可以加快 C 的访问速度代码。看numpy.ascontiguousarray() .

关于python - numpy 更有效的子矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15906607/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com