作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
基本上,我有两个矩阵 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/
我是一名优秀的程序员,十分优秀!