Форма весов. Т должно быть (, 5), а не (5,),
предполагает некоторую путаницу в атрибуте shape
. shape
- это обычный кортеж Python, то есть просто набор чисел, по одному для каждого измерения массива. Это аналог * size
матрицы MATLAB.
(5,)
- это просто способ отображения кортежа из 1 элемента. ,
требуется из-за более старой истории Python использования ()
в качестве простой группировки.
In [22]: tuple([5])
Out[22]: (5,)
Таким образом, ,
в (5,)
не имеет специального значения numpy
, а
In [23]: (,5)
File "<ipython-input-23-08574acbf5a7>", line 1
(,5)
^
SyntaxError: invalid syntax
Ключевое различие между numpy
и MATLAB заключается в том, что массивы могут иметь любое количество измерений (до 32). MATLAB имеет нижнюю границу 2 *. 1023 *
В результате массив из 5 элементов numpy
может иметь формы (5,)
, (1,5)
, (5,1)
, (1,5,1) `и т. Д.
Обработка массива 1d weight
в вашем примере лучше всего объясняется в документации np.dot
. Описать его как inner product
мне кажется достаточно ясным. Но я также доволен
сумма произведений по последней оси a
и второй по последней оси b
описание, с учетом случая, когда b
имеет только одну ось.
(5,) with (5,n) => (n,) # 5 is the common dimension
(n,5) with (5,) => (n,)
(n,5) with (5,1) => (n,1)
В
(x1,...,xn' * (R1,...,Rn)
вам не хватает )
?
(x1,...,xn)' * (R1,...,Rn)
А *
означает матричный продукт? Не поэлементный продукт (.*
в MATLAB)? (R1,...,Rn)
будет иметь размер (n, 1). (x1,...,xn)'
размер (1, n). Продукт (1,1)
.
Кстати, это вызывает еще одну разницу. MATLAB расширяет размеры вправо (n, 1,1 ...). numpy
расширяет их влево (1,1, n) (если необходимо при трансляции). Начальные размеры самые внешние. Это не такая критическая разница, как нижняя граница размера 2, но ее не следует игнорировать.