Главная дигональ и транспонирование квадратной Многомерной матрицы -- вопрос
Primary tabs
Forums:
Главная диагональ --- это набор элементов с координатами (индексами) $(i, i)$, где $i \in [1,\ ...,\ N]$. $N$ -- размерность матрицы,
А вот как быть с транспонированием, например, трёхмерной матрицы? Какой смысл оно имеет в этом случае?
Как составить условие обмена элементов?
Примечание: вообще задача состоит в том, чтобы сделать матрицу самосопряжённой, переписать такой вот код для случая произвольной конечной размерности:
def makeHermitian(self, minElementValue = 0, maxElementValue = 9, matrixHeight = 3, matrixWidth = 3): """ Сделает имеющуюся матрицу вещественных или целых чисел Самосопряжённой (Эрмитовой) :return: matrix """ for (i,j), matrixElement in np.ndenumerate(self.mtx): # сразу по строкам и столбцам if j > i: # если это половина над главной диагональю (делаем отражение относитлеьно главной диагонали) self.mtx[j, i] = matrixElement.real + matrixElement.imag * mc.randSign() * 1j elif j == i: # если это главная диагональ self.mtx[i, i] = matrixElement.real # оставялем только вещественную часть
-- данный код для двумерной матрицы копирует одну её половину (если резать по диагонали) на вторую, при этом комплексно сопрягая элементы.
А точнее -- в этом коде непонятно только условие обмена новое -то есть какие координаты поставить:
self.mtx[(координаты)] = matrixElement.real + matrixElement.imag * mc.randSign() * 1j
Если очередной matrixElement (в эту переменную получаем очередной элемент матрицы) имеет набор координат $(x, y.....z)$.
Может помочь:
- какая-то послойная трансформация: http://www.programmersforum.ru/showthrea...
- Что-то похожее на SE: http://math.stackexchange.com/questions/...
- Log in to post comments
- 43876 reads
math2
Fri, 12/02/2016 - 14:58
Permalink
А вот как быть с
Существует определение транспонирования тензоров.
Здесь можно применить к индексам какую-нибудь подстановку.
В случае, когда индексов всего два, у нас есть только транспозиция $(1,\ 2)$.
Это соответствует транспонированию матрицы.
vedro-compota
Fri, 12/02/2016 - 15:13
Permalink
Здесь можно применить к
Совершенно любую? То есть фиксированного аналога с поворотом двумерной матрицы нет -- так как чем больше размерностей тем больше поворотов?
_____________
матфак вгу и остальная классика =)
math2
Fri, 12/02/2016 - 16:33
Permalink
Совершенно любую? То есть
В самом общем случае --- да.
Это зависит от того, что нужно получить.
Я видел определения транспонирования тензоров, где используется только транспозиция.
vedro-compota
Fri, 12/02/2016 - 19:59
Permalink
что нужно
я, чтобы сделать матрицу самосопряжённой (из произвольной комплексной) обходил в цикле её элементы, и если очередной был "над" главной диагональю ($i>j$ из кода примера ), получал с помощью перестановки индексов элемент элемент симметричный данному, и делал его комплексно сопряжённым данному.
Теперь мне надо сделать тоже самое для $n$-мерного случая. Но если в двумерном случае ясно какой элемент противолежит данному относительно в главной диагонали, то даже в трёхмерном уже как-то не ясно....
....или надо просто "провести отрезок" до главной диагонали в $n$-мерном пространстве, а потом продолжить его на туже длину с другой стороны и мы получить симметричный элемент, да?..или нет.
_____________
матфак вгу и остальная классика =)
math2
Fri, 12/02/2016 - 22:03
Permalink
Пусть дана $n$-мерная матрица
Пусть дана $n$-мерная матрица $M$. Каждый её элемент имеет $n$ индексов:
$$
a_{i_1,\ i_2,\ ...,\ i_n}.
$$
Например, мы можем определить транспонирование как действие на индексы
компонентов $M$ транспозиции $(m \ s)$. Тогда
$$
$$
(i_1,\ i_2,\ ...,\ i_m,\ ...,\ i_s,\ ...,\ i_n)\ \ (m \ s) = (i_1,\ i_2,\ ...,\ i_s,\ ...,\ i_m,\ ...,\ i_n)
$$
Здесь действующая подстановка записана справа.
Тогда можно сделать похожий алгоритм:
Если компонент $a_{i_1,\ i_2,\ ...,\ i_m,\ ...,\ i_s,\ ...,\ i_n}$ из $M$ удовлетворяет условию
$$
i_m\gt i_s,
$$
с помощью подстановки индексов $(m \ s)$ получим компонент, симметричный данному,
то есть
$a_{i_1,\ i_2,\ ...,\ i_s,\ ...,\ i_m,\ ...,\ i_n}$,
и его положим комплексно сопряжённым компоненту $a_{i_1,\ i_2,\ ...,\ i_m,\ ...,\ i_s,\ ...,\ i_n}$.
А можно, например, взять в таком алгоритме вместо транспозиции $(m \ s)$ произвольную подстановку порядка 2. Нам просто важно, чтобы орбита каждого компонента из $M$ состояла
ровно из двух элементов (или же из одного элемента в случае диагонали), и эти элементы тогда могут быть комплексно сопряжены.
vedro-compota
Mon, 12/05/2016 - 21:03
Permalink
n-1
Действительно, для трёхмерного случая numpy.transpose():
выполняет поворот относительно "плоскости" в которой лежит главная диагональ (результат сравнения исходной матрицы с транспонированной):
-----------------------
Это получается наклонное сечение куба
Теперь надо разобраться с формулой общего случая.
_____________
матфак вгу и остальная классика =)
vedro-compota
Mon, 12/05/2016 - 21:36
Permalink
не понятно почему именно
не понятно почему именно диагональное сечение, а не "прямое"...
_____________
матфак вгу и остальная классика =)
vedro-compota
Wed, 12/07/2016 - 13:33
Permalink
алгоритм
Алгоритм вижу (почему-то я пропустил этот коммент раньше).
Получается, что это алгоритм для построения симметрии относительно неподвижного "куба" размерностью $n-1$, да?
И ещё :
Орбита здесь упоминается в каком смысле? Как на вики или в каком-то более простом?
_____________
матфак вгу и остальная классика =)
math2
Wed, 12/07/2016 - 14:50
Permalink
Не совсем так, как на вики.
Не совсем так, как на вики.
Выбираем конкретный набор индексов. Действуем на него всеми различными степенями
выбранной подстановки, и получаем орбиту.
Например, если выбран элемент $a_{ijkm}$ со значениями инедксов $ijkm$, и подстановку
индексов $(1 \ 2 \ 3)$, то получим $a_{jkim}$ и $a_{kijm}$.
И если $i,\ j, \ k, \ m$ попарно различны, то получим орбиту
$$
\{a_{ijkm}, \ a_{jkim}, \ a_{kijm}\}.
$$
vedro-compota
Wed, 12/07/2016 - 21:08
Permalink
трёх достаточно?
вроде в данной ситуации (чтобы получить орбиту $\{a_{ijkm}, \ a_{jkim}, \ a_{kijm}\}$) достаточно потребовать попарной различности лишь первых трёх, т.е. $i,\ j, \ k$ -- так как $m$ всё равно на месте, или нет?
_____________
матфак вгу и остальная классика =)
math2
Wed, 12/07/2016 - 21:31
Permalink
Да, достаточно лишь первых
Да, достаточно лишь первых трёх.
Но я и не говорил, что это необходимо, чтобы все четыре были попарно различны.
Но, к примеру, для $a_{1214}$ получим
$$
\{ a_{1214}, \ a_{2114},\ a_{1124} \}.
$$
Поэтому и для первых трёх это не всегда необходимо.
math2
Tue, 12/06/2016 - 15:46
Permalink
Исходный тензор задан так:
Исходный тензор задан так:
Перепишем это в виде таблицы, чтобы явно указать номера индексов: 1, 2 и 3:
Для записи
можно тоже составить таблицу с явным указанием индексов:
После numpy.transpose() получаем
Возможно,
означает, что в результате индексы записываются в обратном порядке. Например,
если было 1 2 3, то станет 3 2 1.
Это соответствует подстановке индексов (или номеров индексов)
$$
\begin{pmatrix}
1 & 2 & 3 \\
3 & 2 & 1
\end{pmatrix}.
$$
Это транспозиция $(1\ 3)$. В исходной таблице меняются местами столбцы Индекс 1 и Индекс 3 .
vedro-compota
Tue, 12/06/2016 - 19:14
Permalink
технический момент
технический момент по поводу отображения таблиц.
_____________
матфак вгу и остальная классика =)
vedro-compota
Tue, 12/06/2016 - 20:18
Permalink
действительно, можно скорректировать порядок осей
То есть фактически тут применяется подстановка индексов для каждого элемента, и мы можем задать, какую именно применять, да?
А если не зададим, то будет выбрана какая-нибудь.
_____________
матфак вгу и остальная классика =)
math2
Tue, 12/06/2016 - 20:52
Permalink
Если это так, то по умолчанию
Да.
Если это так, то по умолчанию будет выбрана подстановка
$$
\begin{pmatrix}
1 & 2 & 3 & \dots & n-1 & n \\
n & n-1 & n-2 & \dots & 2 & 1
\end{pmatrix}
$$
Кстати, такая подстановка всегда имеет порядок 2.
$$
i\mapsto n-i+1.
$$
Поэтому
$$
i\mapsto n-i+1\mapsto n-(n-i+1)+1=i,
$$
то есть обратной для этой подстановки является она сама.
vedro-compota
Tue, 12/06/2016 - 20:45
Permalink
все сложно
Выходит, что для реализации универсального алгоритма превращения произвольной матрицы в самосопряжённую нужно с учетом конкретной подстановки определить:
Примечание: ответ для транспозиции есть здесь.
Правда, при этом совершенно непонятна ситуация: пусть к нас 4-х мерная матрица,
тогда подстановка $[4, 3, 2, 1]$ переместит все элементы кроме главной диагонали?
То есть тут придётся строить осевую симметрию?
_____________
матфак вгу и остальная классика =)
math2
Tue, 12/06/2016 - 21:09
Permalink
Правда, при этом совершенно
Это смотря, что подразумевается под записью [4,3,2,1].
Цикл $ ( 4\ 3 \ 2\ 1)$ переместит все элементы, кроме главной диагонали. Но порядок этой
подстановки равен 4, то есть больше двух.
А вот подстановка $\begin{pmatrix} 1& 2 & 3 & 4\\ 4& 3& 2& 1\end{pmatrix}$ имеет порядок 2,
и она, например, оставит неподвижным элемент $a_{1331}$.
vedro-compota
Wed, 12/07/2016 - 11:07
Permalink
значение порядка = 2
да, я как раз подразумевал просто подстановку (обратный порядок):
$\begin{pmatrix} 1& 2 & 3 & 4\\ 4& 3& 2& 1\end{pmatrix}$
В данном случае обмен местами относительно куба размерности $n-1$ требует чтобы подстановка имела порядок равный $2$? Что именно даёт нам требование, чтобы порядок был =$2$.Ответ: прочитал выше, если порядок не будет = 2, получится, что это не транспонирование -- так как тогда обратная операция не вернёт всё назад.
_____________
матфак вгу и остальная классика =)
math2
Wed, 12/07/2016 - 11:50
Permalink
так как тогда обратная
Та же операция не вернёт всё назад.
vedro-compota
Wed, 12/07/2016 - 12:04
Permalink
почему же?
но ведь
-- почему не вернёт?
В смысле если мы применим эту операцию (подстановку для индексов каждого элемента) ещё раз -- получим исходную матрицу, разве нет?
_____________
матфак вгу и остальная классика =)
math2
Wed, 12/07/2016 - 12:56
Permalink
Это понятно.
Это понятно.
Я имею в виду,
если порядок выбранной подстановки будет больше двух, то обратная подстановка вернёт всё назад,
но это будет другая подстановка, отличная от исходной.
vedro-compota
Wed, 12/07/2016 - 13:16
Permalink
Согласен. Понял.
Согласен. Понял.
_____________
матфак вгу и остальная классика =)