在Numpy中给出2D数组和1D数组:
a = np.array([[1,2,3],[4,5,6]])
b = np.array([2,4,6])
我想减去a-b,而不是得到:
Out[16]:
array([[-1, -2, -3],
[ 2, 1, 0]])
我想要这个:
array([[[-1, -3, -5], [0, -2, -4], [1, -1, -3]],
[[2, 0, -2], [3, 1, -1], [4, 2, 0]]])
如何进行矢量化处理(即没有for循环)以提高速度?
答案 0 :(得分:2)
一种解决方案是
a[...,np.newaxis]-b
这只是一个广播技巧。
而不是减去
>>> a
array([[1, 2, 3],
[4, 5, 6]])
您来自
>>> a[...,np.newaxis]
array([[[1],
[2],
[3]],
[[4],
[5],
[6]]])
具有形状
>>> a[...,np.newaxis].shape
(2, 3, 1)
b
具有形状
>>> b.shape
(3,)
因此,广播规则将根据您的需要为您提供形状为(2,3,3)
的输出。关于广播here的信息很好。
答案 1 :(得分:2)
您要减去outer
Person