Существует пример документации numpy.dot, который не ясен - PullRequest
1 голос
/ 07 октября 2019

Я читал клочковатую документацию для лучшего понимания, когда я натолкнулся на пример, он был не очень понятен. Я копирую точный пример из приведенной ниже документации:

a = np.arange(3*4*5*6).reshape((3,4,5,6))
b = np.arange(3*4*5*6)[::-1].reshape((5,4,6,3))
np.dot(a, b)[2,3,2,1,2,2]

Вопрос в последней строке np.dot(a,b)[2,3,2,1,2,2], что [2,3,2,1,2,2] делает за np.dot(a,b)?

1 Ответ

1 голос
/ 07 октября 2019

РЕДАКТИРОВАТЬ: Мой предыдущий ответ был неверным!

Когда у вас есть массивы выше, чем степень 2, «пунктирные» вместе, используя np.dot, вы должны указать, какие оси вы умножаете и суммируетеover.

В этом примере [2,3,2,1,2,2] является ссылкой на то, какие оси выбраны в a & b соответственно.

Из документов:

Если a - это массив ND, а b - это массив MD (где M> = 2), то это сумма произведений по последней оси a и от второй к последней оси b:

точка(a, b) [i, j, k, m] = сумма (a [i, j,:] * b [k,:, m])

Так что в нашем случае мы имеем,

a[2,3,2,:] = [342, 343, 344, 345, 346, 347]
b[1,2,:,2] = [249, 246, 243, 240, 237, 234]

И когда вы их ставите,

np.dot([249, 246, 243, 240, 237, 234], [342, 343, 344, 345, 346, 347])

Вы получаете 499128

Вы получаете тот же ответ, когда используете np.dot(a[2,3,2,:], b[1,2,:,2]) или стенографию np.dot(a, b)[2,3,2,1,2,2]

Когда вы не используете какой-либо индекс, я предполагаю, что вы получаете каждую перестановку вышеупомянутого, следовательно, интуитивные размеры счетчика c = np.dot(a, b)

РЕДАКТИРОВАТЬ # 2 Причиной формы c является то, что если индексировать c[2,3,2,1,2,2] согласноНапример, вы получите соответствующий ответ 499128.

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