Дополнительно
Python: Различие между векторами строк и векторами столбцов
Есть ли хороший способ различать векторы строк и векторы столбцов в python? Пока что я использую numpy и scipy, и пока что я вижу, что если я дам вектор, скажем.
from numpy import *
Vector = array([1,2,3])
они не смогут сказать, что я имею в виду - вектор строк или вектор столбцов. Более того:
array([1,2,3]) == array([1,2,3]).transpose()
True
Что в "реальном мире" просто неправда.
Я понимаю, что большинство функций на векторах из упомянутых модулей не нуждаются в дифференцировании. Например, outer(a,b)
или a.dot(b)
, но я'хотел бы дифференцировать для собственного удобства.
61
12
Вы можете сделать различие явным, добавив к массиву еще одно измерение.
Теперь заставим его быть вектором-столбцом:
Другой вариант - использовать np.newaxis, когда вы хотите сделать различие:
Используйте Double
[]
при написании собственных векторов.Затем, если вы хотите вектора-строки:
Или, если хотите, вектор-столбец:
Вектор, который вы создаете, является ни строк, ни столбцов. Это на самом деле имеет только 1 размер. Вы можете проверить это
, который является
1`myvector.форму
, которая(3,)
(кортеж с одним элементом). Для вектора-строки должен быть(1, 3), а для столбца
(3, 1)`Два способа справиться с этим
перекроить
текущийВы можете явно создать строку или столбец
или с ярлыка
Кроме того, вы можете изменить его на
(1, п)
для строки или(Н, 1)
для столбцагде
-1
автоматически находит значение "N".Я думаю, что вы можете использовать ndmin вариант и NumPy.массив. Держа его на 2 говорит, что это будет (4,1) и перенести будет (1,4).
Если вам нужна дистинкция для этого случая, я бы рекомендовал вместо нее использовать
матрицу
, где:дает:
Вы также можете использовать
ndarray
, явно добавляя второе измерение:и:
Если я хочу массив 1х3 или 3х1 массива:
Проверьте свою работу:
Я нашел много ответов здесь полезны, но слишком сложно для меня. На практике я вернусь в
форме
иизменить
и код читается: очень простые и явные.Похоже, что Python'Numpy не различает его, пока вы не используете его в контексте:
"Вы можете иметь стандартные векторы или векторы строк/столбцов, если хотите. "
" :) Вы можете рассматривать массивы ранга 1 как строчные или столбцовые векторы. dot(A,v) рассматривает v как столбцовый вектор, а dot(v,A) рассматривает v как строчный вектор. Это может избавить вас от необходимости вводить много транспозиций"
Также, специфично для вашего кода: "Transpose на массиве ранга-1 ничего не делает. " Источник: http://wiki.scipy.org/NumPy_for_Matlab_Users
Вы можете хранить массив's элементов в строке или столбце следующим образом:
векторы строки (1,0) тензора, вектора (0, 1) тензора. при использовании V = НП.массив([[1,2,3]]), В стали (0,2) тензора. Извините, я перепутал.
Когда я попытался вычислить
ш^т * х
с помощью библиотеки numpy, это было очень запутанным для меня. На самом деле, я не мог'т реализовать это сам. Так вот, это один из немногих подводных камней в пакете numpy, что мы должны знакомить себя.Насколько заинтересованными массив 1Д*, нет нет различия между вектор-строку и вектор-столбец. Они точно такие же.
Посмотрите на следующие примеры, где мы получаем тот же самый результат во всех случаях, чего не скажешь в (в теоретическом смысле) линейная алгебра:
С этой информацией, теперь давайте's попытаться вычислить квадрат длины вектора
|Ж|^2
.Для этого нам нужно преобразовать
Вт
в 2D массива.Теперь давайте'ы вычислить квадрат длины (или квадрат величины) вектора
ж
:Обратите внимание, что мы использовали
Вт
,вес
вместомас
,ж
(как в теоретическом, линейная алгебра) из-за несоответствия формы с использованием НП.точка(Вт, Вт). Итак, у нас есть квадрат длины вектора а[30]
. Может быть, это один из способов отличить (включает'интерпретация) строку и вектор-столбец?И, наконец, я упоминал, что я вычислил способ реализации
ш^т * х
? Да, я сделал :Так, в пакете numpy, порядок операндов восстанавливается, о чем свидетельствуют выше, вопреки тому, что мы изучали в теоретической линейной алгебры.
П. С. : потенциальные проблемы в пакете numpy
Здесь'с другой интуитивно понятным способом. Предположим, что мы имеем:
Сначала мы сделать 2D массив, что как только строки:
Тогда мы сможем перенести ее:
Отличный панды библиотека добавляет функции библиотеки numpy, которые делают эти операции более интуитивным ИМО. Например:
Вы даже сможете определить таблицы данных и создать таблицу-как сводная таблица](http://pandas.pydata.org/pandas-docs/stable/reshaping.html#reshaping-pivot).