import numpy as np
A = np.array([[1, 2], [2, 3]])
B = np.array([[1, 1], [2, 2], [4, 3]])
A
array([[1, 2],
[2, 3]])
B
array([[1, 1],
[2, 2],
[4, 3]])
我需要将A
的第一行与B
的每一行区分开来。如果我这样做:
A - B[0]
array([[0, 1],
[1, 2]])
我只需要B的每一行。
非矢量化方法是:
np.array([A - B[i] for i in range(B.shape[0])])
array([[[ 0, 1],
[ 1, 2]],
[[-1, 0],
[ 0, 1]],
[[-3, -1],
[-2, 0]]])
获得相同的三维数组的矢量化方法是什么?如果能让它变得更容易,我可以使用pandas。
答案 0 :(得分:3)
最简单的方法是为B
numpy
数组添加维度,以便正确地广播它:
In [15]: A - B[:, np.newaxis]
Out[15]:
array([[[ 0, 1],
[ 1, 2]],
[[-1, 0],
[ 0, 1]],
[[-3, -1],
[-2, 0]]])