Вы можете сделать широковещательную передачу между ними, если вы добавите большую фигуру к форме, которая делится на меньшую фигуру.
def pad_to_divisible_shape(arr, a_r, b_r):
div = int(np.ceil(a_r/b_r))
p = div*b_r-a_r
return np.pad(arr, ((0,p),(0,0))), div
def broadcast_op(a, b):
"""Where a and b are numpy arrays and a.shape[0]>b.shape[0]"""
a_r, b_r = a.shape[0], b.shape[0]
a, div = pad_to_divisible_shape(a, a_r, b_r)
a, b = a.reshape(div, b_r, -1), b.reshape(1, b_r, -1)
return ((((a-b).reshape(-1, a.shape[-1]))**2).mean(axis=1))[:a_r]
a = np.random.randn(92334,10)
b = np.random.randn(46, 10)
out = broadcast_op(a,b)
Здесь a дополняется от (92334,10) до (92368 , 10). Затем a и b преобразуются в (2008,46,10) и (1,46,10), после чего операция ab может транслироваться. Фактический результат имеет форму (92368,), из которой вы можете просто удалить лишнюю часть, нарезав [: a_r].