在形状不同的操作数上执行向量减法的Numpythonic方法 (a,n) - (b,n)
我有两个矩阵,长得像这样:
a = np.array([[1,2], [3,4], [5,6], [7,8]])
b = np.array([[9,10], [11,12], [13,14]])
如果我们调试一下 a
和 b
,它们看起来会是这样的:
[[1 2]
[3 4]
[5 6]
[7 8]]
(4, 2)
int32
[[ 9 10]
[11 12]
[13 14]]
(3, 2)
int32
我可以通过这种方式实现我想要的结果,其中 c
是结果:
c = []
for i in range(b.shape[0]):
c.append(b[i] - a)
c = np.array(c)
现在,c
看起来是这样的:
[[[ 8 8]
[ 6 6]
[ 4 4]
[ 2 2]]
[[10 10]
[ 8 8]
[ 6 6]
[ 4 4]]
[[12 12]
[10 10]
[ 8 8]
[ 6 6]]]
(3, 4, 2)
int32
正如你所看到的,我进行减法运算时还是用了 for 循环
,有没有一种更“numpy”的方法,可以不使用循环来进行减法,这样我就可以利用 numpy 的优化,提升性能,因为 numpy 是用 C 语言
编写的。
2 个回答
2
2
你可以这样做:
>>> a = np.array([[1,2], [3,4], [5,6], [7,8]])
>>> b = np.array([[9,10], [11,12], [13,14]])
>>> b[:, None, :] - a[None, :, :]
array([[[ 8, 8],
[ 6, 6],
[ 4, 4],
[ 2, 2]],
[[10, 10],
[ 8, 8],
[ 6, 6],
[ 4, 4]],
[[12, 12],
[10, 10],
[ 8, 8],
[ 6, 6]]])