微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 np.linalg.norm() (python) 应用于 2d numpy 数组的每个元素和给定值的最快方法是什么?

如何解决将 np.linalg.norm() (python) 应用于 2d numpy 数组的每个元素和给定值的最快方法是什么?

我想计算给定值 x 和二维数组 arr 的每个单元格之间的 L2 范数(当前大小为 1000 x 100。我目前的方法

    for k in range(0,999):
        for l in range(0,999):
            distance = np.linalg.norm([x - arr[k][l]],ord= 2)

x 和 arr[k][l] 都是标量。我实际上想计算每个数组单元到给定值 x 的成对距离。最后,对于 1000x 1000 值,我需要 1000x1000 距离。 不幸的是,当涉及到完成所需的时间时,上述方法一个瓶颈。这就是为什么我正在寻找一种方法来加快速度。我很感激任何建议。

一个可重现的例子(按要求):

arr = [[1,2,4,4],[5,6,7,8]]
x = 2
for k in range(0,3):
        for l in range(0,1):
            distance = np.linalg.norm([x - arr[k][l]],ord= 2)

请注意,真正的 arr 要大得多。这只是一个玩具示例。

实际上,我不一定要使用 np.linalg.norm()。我只需要给定值 x 的所有这些数组单元的 l2 范数。如果你知道更合适的功能,我愿意尝试。

解决方法

您可以执行以下操作

  1. 从数组 x 中删除 arr
  2. 然后计算范数
    diff = arr - x
    distance = np.linalg.norm(diff,axis=2,ord=2)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。