Tenho dois arrays numpy a
e b
outros que a.shape[:-1]
e b.shape
são transmissíveis. Com apenas essa restrição, quero calcular um array c
de acordo com o seguinte:
c = numpy.empty(numpy.broadcast_shapes(a.shape[:-1],b.shape),a.dtype)
for i in range(a.shape[-1]):
c[...,i] = a[...,i] * b
O código acima certamente funciona, mas gostaria de saber se existe uma maneira mais elegante (e idiomática) de fazê-lo.
Use np.newaxis com ... para adicionar um novo eixo após o último eixo.
c = a * b[..., np.newaxis]
Que é o mesmo que
c = a * b[np.newaxis, :]
A propósito, você não precisa alocar espaço para c com antecedência.