gpt4 book ai didi

python - 对矩阵本身求幂 N 次?

转载 作者:行者123 更新时间:2023-11-28 17:03:54 26 4
gpt4 key购买 nike

我正在使用 FOR 实现矩阵求幂:

import numpy as np
fl=2
cl=2
fl2=fl
cl2=cl
M = random.random((fl,cl))
M2 = M
Result = np.zeros((fl,cl))
Temp = np.zeros((fl,cl))
itera = 2
print('Matriz A:\n',M)
print('Matriz AxA:\n',M2)

for i in range (0,itera):
for a in range(0,fl):
for b in range (0,cl):
Result[a,b]+=M[a,b]*M[a,b]
temp[a,b]=Result[a,b]
Res[a,k]=M[a,b]
print('Potencia:\n',temp)
print('Matriz:\n', Result)

错误是它不能很好地执行 Result[a,b]+=M[a,b]*M[a,b] 中的乘法,当我将它保存在 a将其与原始矩阵相乘的临时矩阵,它不会在 for i in range (0,itera) 中进行下一次跳转:

我知道我可以执行函数 np.matmul但我尝试使用 FOR 循环来完成

Example

最佳答案

您正在寻找 np.linalg.matrix_power .

如果您使用的是 numpy,请不要使用 for 循环,而是使用向量化操作。

arr = np.arange(16).reshape((4,4))

np.linalg.matrix_power(arr, 3)

array([[ 1680,  1940,  2200,  2460],
[ 4880, 5620, 6360, 7100],
[ 8080, 9300, 10520, 11740],
[11280, 12980, 14680, 16380]])

与显式乘法相同:

arr @ arr @ arr

>>> np.array_equal(arr @ arr @ arr, np.linalg.matrix_power(arr, 3))
True

既然你问了

如果您真的想要一个使用循环的简单解决方案,我们可以很容易地将各个部分组合在一起。首先,我们需要一种方法来实际乘以矩阵。有击败 n^3 复杂性的选项,这个答案不会那样做。这是一个基本的矩阵乘法函数:

def matmultiply(a, b):
res = np.zeros(a.shape)
size = a.shape[0]

for i in range(size):
for j in range(size):
for k in range(size):
res[i][j] += a[i][k] * b[k][j]

return res

现在您需要一个指数函数。这个函数接受一个矩阵和一个幂,并将矩阵提升到那个幂。

def loopy_matrix_power(a, n):
res = np.identity(a.shape[0])
while n > 0:
if n % 2 == 0:
a = matmultiply(a, a)
n /= 2
else:
res = matmultiply(res, a)
n -= 1

return res

在行动中:

loopy_matrix_power(arr, 3)

array([[ 1680.,  1940.,  2200.,  2460.],
[ 4880., 5620., 6360., 7100.],
[ 8080., 9300., 10520., 11740.],
[11280., 12980., 14680., 16380.]])

关于python - 对矩阵本身求幂 N 次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52505732/

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