首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在numpy中无循环计算矩阵范数

在numpy中无循环计算矩阵范数
EN

Stack Overflow用户
提问于 2020-05-02 05:56:05
回答 4查看 287关注 0票数 1

如何计算( 100,8,8)矩阵中的矩阵范数,以使我在末尾有100个范数列表向量?例如,我想要每个8x8矩阵的范数。

现在我有,但它可能太低效和丑陋

代码语言:javascript
复制
norms = []
for m in mats:
    norms.append(np.linalg.norm(m, ord='fro'))
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-05-02 06:22:19

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

代码语言:javascript
复制
norms = np.linalg.norm(m, ord='fro', axis=(1, 2))

例如,

代码语言:javascript
复制
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])
票数 5
EN

Stack Overflow用户

发布于 2020-05-02 06:07:30

代码语言:javascript
复制
list(map(lambda x: np.linalg.norm(x, ord='fro'), mats))
票数 1
EN

Stack Overflow用户

发布于 2020-05-02 06:27:43

代码语言:javascript
复制
foo = mats.reshape(100, -1)
np.sqrt(np.diagonal(foo @ foo.T))

(这是专门针对Frobenius规范的)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61551410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档