使用python在循环内通过相同的矩阵-矩阵乘法创建不同的矩阵

Posted

技术标签:

【中文标题】使用python在循环内通过相同的矩阵-矩阵乘法创建不同的矩阵【英文标题】:Creating different matrix by same matrix-matrix multiplication inside loop using python 【发布时间】:2018-08-25 13:39:38 【问题描述】:

我有一个维度为 n*n 的方阵。我必须定义一个函数,该函数将此矩阵A 作为输入以及一个值k。 矩阵 A 是由 numpy 随机函数生成的随机矩阵。 假设 k=4,那么我们必须生成三个不同的矩阵:

 matrix_2=A*A
 matrix_3=A*A*A
 matrix_4=A*A*A*A

以上所有乘法都是矩阵乘法(其中列 A = B 行),而不是元素乘法。

k 可以是用户给定的任何值。我们如何在 python 中使用 for 循环来实现这一点。

【问题讨论】:

目前有代码吗? 您所描述的简单实现应该可以工作。万一你被困在某个部分,只问那个部分。 好的。我会记住的。谢谢 【参考方案1】:

listdict 用于可变数量的变量。在这种情况下,您可以使用字典推导式,字典键与幂对齐:

from numpy.linalg import matrix_power

np.random.seed(0)

n = 2
A = np.random.random((n, n))

def make_arrays(arr, k):
    return i: matrix_power(arr, i) for i in range(1, k+1)

res = make_arrays(A, 4)

结果:

1: array([[0.5488135 , 0.71518937],
           [0.60276338, 0.54488318]]),
 2: array([[0.73228622, 0.78220024],
           [0.65924031, 0.72798764]]),
 3: array([[0.87337022, 0.94993107],
           [0.80060427, 0.86814988]]),
 4: array([[1.05190103, 1.14222656],
           [0.96267139, 1.04562393]])

【讨论】:

这是元素乘法,我的意思是矩阵乘法。 np.matmul(a,b) 是否也意味着同样的事情? 对于矩阵,是的。但请阅读docs 以找出与np.dot / @ 的区别,这是更常见的操作。

以上是关于使用python在循环内通过相同的矩阵-矩阵乘法创建不同的矩阵的主要内容,如果未能解决你的问题,请参考以下文章

Python:循环内矩阵每个元素的绝对值

用 operator* 重载包装矩阵乘法

python vs R中的矩阵乘法没有为SVD白化返回相同的结果

缓存友好的优化:面向对象的矩阵乘法和函数内平铺矩阵乘法

Clojure 与 Numpy 中的矩阵乘法

在循环内的 Python 中附加一个矩阵