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

标签 python arrays numpy matrix

我正在尝试使用 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/

相关文章:

python - 将一维 numpy 数组转换为矩阵的顶部三角形

python - 将 unicode 元素读入 numpy 数组

python - 制作一个等待参数更改的函数,由按钮触发

c++ - 使用堆栈查找每个元素的下一个更大的

javascript - 将数组的值填充到复选框的 bool 值

python - np.savetxt 不存储数组信息

numpy 数组中部分最大值的 pythonic 方式

python - 如何从 C 中找到 Python 函数的参数数量?

python - 监视卡住的 python 进程

python - 将函数应用于数组的每一对行