In [6]: A = np.array([[1,2],[3,4]]); x=np.array([5,6])
inner
работает с вашим 2d-массивом (правда, его документация немного расплывчата по этому поводу
In [7]: np.inner(A,x)
Out[7]: array([17, 39])
Обычно мы используем np.dot
для умножения матриц, включая 1d inner
:
In [8]: np.dot(A,x)
Out[8]: array([17, 39])
или в более новом numpy
, операторе @, который также np.matmul
.
In [9]: A@x
Out[9]: array([17, 39])
Оба используют суммы last of A
со 2-м до последнего из B` (или единственная ось x).
Два внутренних вычисления, которые вы хотите:
In [10]: np.inner(A[0,:],x)
Out[10]: 17
In [11]: np.inner(A[1,:],x)
Out[11]: 39
A (2, n) широковещательные рассылки с массивом (n,), просто отлично, результат (2, n)
In [12]: A * x
Out[12]:
array([[ 5, 12],
[15, 24]])
In [13]: (A * x).sum(axis=1) # and sum on the `n` axis for inner
Out[13]: array([17, 39])
broadcasting
имеет эффект повторяющихся строк (или других измерений), но эффективен в вычислительном отношении.