gpt4 book ai didi

python - Numpy 2D Array - Power Of - 不返回答案?

转载 作者:行者123 更新时间:2023-12-01 03:20:26 25 4
gpt4 key购买 nike

我正在尝试使用 numpy 获取 Python 列表/矩阵的“功能”。我当前唯一的工作解决方案是使用 np.dot() 的迭代函数:

def matr_power(matrix, power):
matrix_a = list(matrix)
matrix_b = list(matrix)
for i in range(0, power-1):
matrix_a = np.dot(matrix_a, matrix_b)
return matrix_a

可以满足我的需求,但我知道这可能不是最有效的方法。

我尝试将列表转换为 numpy 数组,对其执行幂运算,然后返回列表,以便它可以我需要的形式使用。转换似乎发生了,但功率计算却没有发生。

while (foo != bar):
matr_x = np.asarray(matr_a)
matr_y = matr_x ** n
matr_out = matr_y.tolist()
n += 1
# Other code here to output certain results

问题是,矩阵按预期转换为数组,但在执行幂运算时 (**) matr_y 最终与 matr_x 就好像从未执行过任何计算一样。我尝试过使用 np.power(matr_y, n) 以及 Stack Overflow 上相关问题中找到的其他一些解决方案。

我尝试过使用 numpy 文档,但是(要么我误解了它,要么)它只是确认这应该按预期工作。

在 PyCharm 中检查调试控制台时,一切似乎都很好(所有矩阵/列表/数组都按预期进行转换),除了计算 matr_x ** i 似乎从未被计算(或者从未存储)在matr_y中)。

<小时/>

回答

尽管可以将 numpy 矩阵与 ** 运算符一起使用,但最佳解决方案是将 numpy 数组(因为 numpy 矩阵已弃用)与 numpy 的 linalg matrix_power 方法结合使用。

matr_x = np.array(mat_a)
matr_y = np.linalg.matrix_power(matr_x, path_length)
work_matr = matr_y.tolist()

现在很明显,如果我没有使用邻接矩阵(只有零和一),** 的逐元素功能可能已经更早被发现。

最佳答案

(至少)有两种使用 numpy 计算矩阵幂的选项,无需多次调用 dot:

例如,

In [38]: a
Out[38]:
array([[0, 1, 0],
[1, 0, 1],
[0, 1, 0]])

In [39]: np.linalg.matrix_power(a, 2)
Out[39]:
array([[1, 0, 1],
[0, 2, 0],
[1, 0, 1]])

In [40]: np.linalg.matrix_power(a, 3)
Out[40]:
array([[0, 2, 0],
[2, 0, 2],
[0, 2, 0]])

In [41]: m = np.matrix(a)

In [42]: m ** 2
Out[42]:
matrix([[1, 0, 1],
[0, 2, 0],
[1, 0, 1]])

In [43]: m ** 3
Out[43]:
matrix([[0, 2, 0],
[2, 0, 2],
[0, 2, 0]])

关于python - Numpy 2D Array - Power Of - 不返回答案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41980536/

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