在numpy中计算没有循环的矩阵范数

Yoh*_*oth 1 python numpy

如何计算 (100, 8, 8) 矩阵内的矩阵范数,以便最后有 100 个范数列表向量?例如,我想要每个 8x8 矩阵的范数。

现在我这样做,但它可能太低效和丑陋

norms = []
for m in mats:
    norms.append(np.linalg.norm(m, ord='fro'))
Run Code Online (Sandbox Code Playgroud)

War*_*ser 5

numpy.linalg.norm接受一个axis参数,该参数可以是一个包含两个矩阵的元组。所以你的计算很简单

norms = np.linalg.norm(m, ord='fro', axis=(1, 2))
Run Code Online (Sandbox Code Playgroud)

例如,

In [43]: import numpy as np

In [44]: rng = np.random.default_rng()

In [45]: m = rng.uniform(0, 3, size=(10, 8, 8))

In [46]: norms = np.linalg.norm(m, ord='fro', axis=(1, 2))

In [47]: norms
Out[47]: 
array([15.43326187, 12.18174753, 12.72366662, 14.20558871, 14.08558457,
       13.51040102, 13.38476228, 14.3334069 , 15.19745515, 14.46134742])
Run Code Online (Sandbox Code Playgroud)