gpt4 book ai didi

python - 两个矩阵的行范数的矢量化加速

转载 作者:行者123 更新时间:2023-12-01 09:29:51 25 4
gpt4 key购买 nike

基本上,我有两个矩阵 A 和 B,我想要 C(矩阵侧面标记的尺寸),计算如下:

下面的公式是我现在所做的。我利用了一些广播,但仍然留下了一个循环。我对Python很陌生,所以也许我错了,但我只是有一种预感,这个循环可以被消除。有人可以分享一些想法吗?

编辑:2018-04-27 09:48:28根据要求,举个例子:

In [5]: A
Out[5]:
array([[0, 1],
[2, 3],
[4, 5],
[6, 7],
[8, 9]])

In [6]: B
Out[6]:
array([[0, 1],
[2, 3],
[4, 5],
[6, 7]])

In [7]: C = np.zeros ((B.shape[0], A.shape[0]))

In [8]: for m in range (B.shape[0]):
...: C[m] = np.sum (np.square (B[m] - A), axis=1).flatten ()
...:

In [9]: C
Out[9]:
array([[ 0., 8., 32., 72., 128.],
[ 8., 0., 8., 32., 72.],
[ 32., 8., 0., 8., 32.],
[ 72., 32., 8., 0., 8.]])

最佳答案

这似乎是以一些额外内存为代价的:

C = ((B[:, :, None] - A.T)**2).sum(axis=1)

测试:

import numpy
D = 10
N = 20
M = 30

A = numpy.random.rand(N, D)
B = numpy.random.rand(M, D)
C = numpy.empty((M, N))

时间安排:

for m in range(M):
C[m] = numpy.sum((B[m, :] - A)**2, axis=1)

每次循环 514 µs ± 13.7 µs(7 次运行的平均值 ± 标准偏差,每次 1000 次循环)

C2 = ((B[:, :, None] - A.T)**2).sum(axis=1)

每次循环 53.6 µs ± 529 ns(7 次运行的平均值 ± 标准差,每次 10000 次循环)

关于python - 两个矩阵的行范数的矢量化加速,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50063204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com