Точечный продукт вектора в SciPy / NumPy (получение ValueError: объекты не выровнены)

Я только начал изучать SciPy и борюсь с самыми основными функциями.

Рассмотрим следующий стандартный вектор:

In [6]: W=array([[1],[2]]) In [7]: print W [[1] [2]] 

Если я правильно ее понимаю, это должно быть представление SciPy стандартного математического вектора 2×1, например:

 (1) (2) 

Точечный продукт этого вектора должен быть просто 1*1+2*2=5 . Однако это не работает в SciPy:

 In [16]: dot(W, W) --------------------------------------------------------------------------- ValueError Traceback (most recent call last) /home/ingo/<ipython-input-16-961b62a82495> in <module>() ----> 1 dot(W, W) ValueError: objects are not aligned 

Обратите внимание, что работает следующее. Это должен быть вектор формы (1 2) если я не ошибаюсь.

 In [9]: V=array([1,2]) In [10]: print V [1 2] In [11]: dot(V, V) Out[11]: 5 

Каково мое заблуждение? Что я делаю не так?

6 Solutions collect form web for “Точечный продукт вектора в SciPy / NumPy (получение ValueError: объекты не выровнены)”

Ключевым моментом здесь является то, что numpy / scipy отличает форму массивов при вычислении точечных продуктов. Глядя на ваш первый пример, W представляет собой массив 2×1:

 In [7]: W=array([[1],[2]]) In [8]: print W.shape ------> print(W.shape) (2, 1) 

поэтому необходимо использовать оператор транспонирования для вычисления точечного (внутреннего) произведения W с самим собой:

 In [9]: print dot(WT,W) ------> print(dot(WT,W)) [[5]] In [10]: print np.asscalar(dot(WT,W)) -------> print(np.asscalar(dot(WT,W))) 5 

Вы должны использовать vdot : «Вернуть точечный продукт двух векторов». Эта функция выравнивает входные аргументы и дает ожидаемые результаты. Для вашего примера:

 >>> W = np.array([[1], [2]]) >>> np.vdot(W, W) 5 >>> 

В вашем первом случае numpy генерирует вектор как двумерный массив, в основном матрицу 2 на 1. В этом случае точка-точка не может быть взята, потому что и матрица m-by-n может быть усечена только матрицей n-by-k. Решение состоит в том, чтобы использовать:

 dot(WT,W) 

Это то же самое, что и xx иногда записывается x ^ T x.

Во втором случае для удобства numpy генерирует одномерный массив вместо матрицы, поэтому точка-произведение имеет простое определение. Если вы должны были создать матрицу размером 1 на 2, используя

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

то вы получите то же поведение, что и в первом случае.

Вы ошибаетесь в отношении формы массива, в котором вы проходите:

 >>> W = np.array([[1], [2]]) >>> W.shape (2, 1) >>> W = np.array([1, 2]) >>> W.shape (2,) 

Как вы заметили, использование np.dot во втором определении W работает так, как ожидалось. Чтобы поместить матрицу 2-й с собой, когда она не квадратная, вы должны перенести:

 >>> W = np.array([[1], [2]]) >>> np.dot(W, W.transpose()) array([[1, 2], [2, 4]]) 

Ярлык для transpose – это WT

Обратите внимание, что форма вывода отличается в зависимости от того, начинаете ли вы с транспозицией или оригиналом, как и следовало ожидать:

 >>> np.dot(WT, W) array([[5]]) >>> np.dot(WT, W).shape (1, 1) 

Подробнее см. В документах numpy .

Это массив из двух массивов, а не массив из двух значений. Первый из них можно рассматривать как матрицу: две строки по одному столбцу.

Второй правильный; он дает вам правильный правильный точечный продукт. Верьте своим глазам; используйте вторую.

В первом примере W является 2-мерным массивом, тогда как в последнем (тот, который работает), у вас всего 1 dim.

Йон может быть уверен, что второй способ – это правильный способ сделать это.

Interesting Posts

Эквивалент Python для Haskell's (для индексации списка)

Подпроцесс программы Python C зависает в строке «for line in iter»

Получение «не существует или является ошибкой m2m» на моем uuid (первичный ключ) при попытке сохранить в DRF

Сортировка массива 2D numpy несколькими осями

matplotlib: вставные оси для нескольких ящиков

Удалите определенную строку в файле csv с помощью python

Tensorflow: восстановление графика и модели, а затем выполнение оценки на одном изображении

Преобразование длинных целых чисел в строки в пандах (чтобы избежать научной нотации)

Изображение в матрицу с использованием python

Предсказание следующего слова с использованием примера тензорного потока модели ptb LSTM

Сохранение матрицы RGB в виде текста

Может установить любое свойство объекта Python

Как удалить элемент из списка, итерации его в Python?

Генерирование функций внутри цикла с выражением лямбда в python

Предпочтение Python XOR: побитовый оператор и логические операторы

Python - лучший язык программирования в мире.