У меня установлена более старая версия numpy (1.11.0), где метод # 1 выдает странный вывод. Я понимаю, что это не ожидаемое поведение, и было исправлено в более поздних версиях; но на случай, если это случится с кем-то еще:
Python 2.7.12 (default, Dec 4 2017, 14:50:18)
[GCC 5.4.0 20160609] on linux2
>>> import numpy as np
>>> x = np.arange(4 * 4).reshape(4, 4)
>>> np.dot(x, x.T, out=x)
array([[ 14, 94, 1011,
15589],
[ 115715, 13389961335, 120510577872,
1861218976248],
[ 182547, 21820147595568, 1728119013671256390,
5747205779608970957],
[ 249379, 29808359122268, 7151350849816304816,
-3559891853923251270]])
>>> np.version.version
'1.11.0'
Насколько я могу проверить, по крайней мере, начиная с numpy 1.14.1, метод # 1 дает ожидаемый результат; как метод # 2 делает с обеими версиями.