Матричный точечный продукт в питоне - PullRequest
0 голосов
/ 04 декабря 2018

Я новичок в Python и запутался в коде

X = np.array([2,3,4,4])
print(np.dot(X,X))

Это работает

Y = np.array([[100],
        [200],
        [300],
        [400]])
print(np.dot(Y,Y))

Это не так.Я понял это из-за связи с размерами массива.Но я не могу понять, как.Пожалуйста, объясните.

1 Ответ

0 голосов
/ 04 декабря 2018

X является массивом 1d (вектор строки не является правильным дескриптором):

In [382]: X = np.array([2,3,4,4])
In [383]: X.shape
Out[383]: (4,)
In [384]: np.dot(X,X)     # docs for 1d arrays apply
Out[384]: 45

Y является массивом 2d.

In [385]: Y = X[:,None]
In [386]: Y
Out[386]: 
array([[2],
       [3],
       [4],
       [4]])
In [387]: Y.shape
Out[387]: (4, 1)
In [388]: np.dot(Y,Y)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-388-3a0bc5156893> in <module>()
----> 1 np.dot(Y,Y)

ValueError: shapes (4,1) and (4,1) not aligned: 1 (dim 1) != 4 (dim 0)

Для массивов 2dпоследнее измерение первых пар со 2-го до последнего второго.

In [389]: np.dot(Y,Y.T)    # (4,1) pair with (1,4) to produce (4,4)
Out[389]: 
array([[ 4,  6,  8,  8],
       [ 6,  9, 12, 12],
       [ 8, 12, 16, 16],
       [ 8, 12, 16, 16]])
In [390]: np.dot(Y.T,Y)    # (1,4) pair with (4,1) to produce (1,1)
Out[390]: array([[45]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...