Я пытаюсь взять точечный продукт между тремя массивами numpy. Тем не менее, я изо всех сил пытаюсь обернуть голову вокруг этого.
Проблема заключается в следующем:
У меня есть два (4) массива numpy в форме a
и b
соответственно, а также массив numpy с формой (4, 4, 3), c
.
import numpy as np
a = np.array([0, 1, 2, 3])
b = np.array([[[1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1]],
[[2, 2, 2], [2, 2, 2], [2, 2, 2], [2, 2, 2]],
[[3, 3, 3], [3, 3, 3], [3, 3, 3], [3, 3, 3]],
[[4, 4, 4], [4, 4, 4], [4, 4, 4], [4, 4, 4]]])
c = np.array([4, 5, 6, 7])
Я хочу вычислить точечный продукт таким образом, чтобы мой результат был 3-кортежным. То есть сначала расставьте точки a
с b
, а затем расставьте точки с c
, при необходимости транспонируя. Другими словами, я хочу вычислить скалярное произведение между a
, b
и c
, как если бы c
имело форму (4, 4)
, но в результате я хочу получить тройной кортеж.
Я пытался:
Изменение формы a
и c
, а затем вычисление скалярного произведения:
a = np.reshape(a, (4, 1))
c = np.reshape(c, (4, 1))
tmp = np.dot(a.T, b) # now has shape (1, 4, 3)
result = np.dot(tmp, c)
В идеале у меня теперь должно быть:
print(result.shape)
>> (1, 1, 3)
но я получаю ошибку
ValueError: фигуры (1,4,3) и (4,1) не выровнены: 3 (тусклый 2)! = 4 (тусклый 0)
Я также пытался использовать функцию tensordot из numpy, но безуспешно.
np.dot(np.dot(a, b).T, c)
; результатarray([360, 360, 360])
- person kmario23   schedule 02.04.2017np.dot(np.dot(a, b).T, c)
не работает, так какa
иb
имеют форму (1, 4) - person Ivar Stangeby   schedule 02.04.2017