Есть несколько способов сделать это.С np.matmul
вы можете сделать:
out = np.matmul(rotation, points[:, :, np.newaxis])[:, :, 0]
Или, что эквивалентно, если вы используете Python 3.5 или более позднюю версию:
out = (rotation @ points[:, :, np.newaxis])[:, :, 0]
Другой способ - с np.einsum
:
out = np.einsum('ij,nj->ni', rotation, points)
Наконец, как вы предложили, вы также можете использовать np.tensordot
:
out = np.tensordot(points, rotation, axes=[1, 1])
Обратите внимание, что вв этом случае points
является первым аргументом, а rotation
- вторым, в противном случае размеры на выходе будут изменены на противоположные.