Каковы требования к размерности для np.dot? - PullRequest
0 голосов
/ 10 февраля 2019

У меня есть переменная W, которая имеет:

[[1.]
 [2.]
 [3.]
 [4.]
 [5.]]

И еще одна переменная X, которая имеет:

[[1.  5.1 3.5 1.4 0.2]
 [1.  4.9 3.  1.4 0.2]
 [1.  4.7 3.2 1.3 0.2]
 [1.  4.6 3.1 1.5 0.2]
 [1.  5.  3.6 1.4 0.2]
 [1.  5.4 3.9 1.7 0.4]
 [1.  4.6 3.4 1.4 0.3]
 [1.  5.  3.4 1.5 0.2]
 [1.  4.4 2.9 1.4 0.2]
 [1.  4.9 3.1 1.5 0.1]
 [1.  5.4 3.7 1.5 0.2]
 ...
 [1.  5.7 2.8 4.1 1.3]]

Я продолжаю гадать и проверять, чтобы увидеть, как np.dot их вместе.np.dot(W.T, X.T), кажется, работает, но форма неправильная: (1, 100).

Я хочу сделать следующее:

1 * 1 + 2 * 5.1 + 3 * 3.5 + 4 * 1.4 + 5 * 0.02 для каждой строки в X.Как я могу это сделать?

Ответы [ 3 ]

0 голосов
/ 10 февраля 2019

Матричное умножение равно строка за столбцом :

        X
XXXXX   X   .
..... * X = .
.....   X   .
        X

Итак:

In [6]: a=np.array([[1,  5.1, 3.5, 1.4, 0.2],
   ...:  [1,  4.9, 3,  1.4, 0.2],
   ...:  [1,  4.7, 3.2, 1.3, 0.2],
   ...:  [1,  4.6, 3.1, 1.5, 0.2],
   ...:  [1,  5,  3.6, 1.4, 0.2],
   ...:  [1,  5.4, 3.9, 1.7, 0.4],
   ...:  [1,  4.6, 3.4, 1.4, 0.3],
   ...:  [1,  5,  3.4, 1.5, 0.2],
   ...:  [1,  4.4, 2.9, 1.4, 0.2],
   ...:  [1,  4.9, 3.1, 1.5, 0.1],
   ...:  [1,  5.4, 3.7, 1.5, 0.2]])

In [8]: b=np.array([[1.],
   ...:  [2.],
   ...:  [3.],
   ...:  [4.],
   ...:  [5.]])

In [25]: np.dot(a,b)
Out[25]:
array([[28.3],
       [26.4],
       [26.2],
       [26.5],
       [28.4],
       [32.3],
       [27.5],
       [28.2],
       [25.1],
       [26.6],
       [29.9]])
0 голосов
/ 10 февраля 2019

Последнее измерение a должно быть такого же размера, что и второе-последнее измерение b .

Дано: np.dot(a, b)

Больше ссылок: https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.dot.html

0 голосов
/ 10 февраля 2019

Вы можете использовать np.matmul:

W = np.array([[1.],[2.],[3.],[4.],[5.]])

X = np.array([[1.,  5.1, 3.5, 1.4, 0.2],
              [1.,  4.9, 3. , 1.4, 0.2],
              [1. , 4.7, 3.2, 1.3, 0.2],
              [1.  ,4.6, 3.1, 1.5, 0.2],
              [1.  ,5. , 3.6, 1.4, 0.2],
              [1.  ,5.4, 3.9, 1.7, 0.4]])

np.matmul(X,W)

array([[28.3],
       [26.4],
       [26.2],
       [26.5],
       [28.4],
       [32.3]])

Быстрая проверка на выходе:

1*1 + 2*5.1 + 3*3.5 + 4*1.4 + 5*0.2 = 28.3

Обратите внимание, что в этом случае это эквивалентно np.dot, учитывая, что оба входа 2-D arrays.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...