Главная дигональ и транспонирование квадратной Многомерной матрицы -- вопрос

Главная диагональ --- это набор элементов с координатами (индексами) $(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)$.

Может помочь:

А вот как быть с транспонированием, например, трёхмерной матрицы? Какой смысл оно имеет в этом случае?

Существует определение транспонирования тензоров.

Как составить условие обмена элементов?

Здесь можно применить к индексам какую-нибудь подстановку.

В случае, когда индексов всего два, у нас есть только транспозиция $(1,\ 2)$.
Это соответствует транспонированию матрицы.

vedro-compota's picture

Здесь можно применить к индексам какую-нибудь подстановку

Совершенно любую? То есть фиксированного аналога с поворотом двумерной матрицы нет -- так как чем больше размерностей тем больше поворотов?

_____________
матфак вгу и остальная классика =)

Совершенно любую? То есть фиксированного аналога с поворотом двумерной матрицы нет -- так как чем больше размерностей, тем больше поворотов?

В самом общем случае --- да.

Это зависит от того, что нужно получить.

Я видел определения транспонирования тензоров, где используется только транспозиция.

vedro-compota's picture

Это зависит от того, что нужно получить.

я, чтобы сделать матрицу самосопряжённой (из произвольной комплексной) обходил в цикле её элементы, и если очередной был "над" главной диагональю ($i>j$ из кода примера ), получал с помощью перестановки индексов элемент элемент симметричный данному, и делал его комплексно сопряжённым данному.

Теперь мне надо сделать тоже самое для $n$-мерного случая. Но если в двумерном случае ясно какой элемент противолежит данному относительно в главной диагонали, то даже в трёхмерном уже как-то не ясно....

....или надо просто "провести отрезок" до главной диагонали в $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's picture

Действительно, для трёхмерного случая numpy.transpose():

        self.mtx[0, 0, 0] = 1;  # главная диагональ
        self.mtx[1, 0, 0] = 2;
        self.mtx[1, 1, 0] = 3;  
        self.mtx[0, 1, 0] = 4; # в плоскости главной диагонали
        self.mtx[0, 0, 1] = 5; 
        self.mtx[1, 0, 1] = 6; # в плоскости главной диагонали
        self.mtx[1, 1, 1] = 7; # главная диагональ
        self.mtx[0, 1, 1] = 8;

выполняет поворот относительно "плоскости" в которой лежит главная диагональ (результат сравнения исходной матрицы с транспонированной):

init: 
 [[[1 5]
  [4 8]]

 [[2 6]
  [3 7]]]
transponce: 
 [[[1 2]
  [4 3]]

 [[5 6]
  [8 7]]]

-----------------------

Это получается наклонное сечение куба

Теперь надо разобраться с формулой общего случая.

_____________
матфак вгу и остальная классика =)

vedro-compota's picture

не понятно почему именно диагональное сечение, а не "прямое"...

_____________
матфак вгу и остальная классика =)

vedro-compota's picture

Например, мы можем определить транспонирование как действие на индексы
компонентов $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}$.

Алгоритм вижу (почему-то я пропустил этот коммент раньше).

Получается, что это алгоритм для построения симметрии относительно неподвижного "куба" размерностью $n-1$, да?

И ещё :

А можно, например, взять в таком алгоритме вместо транспозиции (m s) произвольную подстановку порядка 2. Нам просто важно, чтобы орбита каждого компонента из M состояла
ровно из двух элементов (или же из одного элемента в случае диагонали), и эти элементы тогда могут быть комплексно сопряжены.

Орбита здесь упоминается в каком смысле? Как на вики или в каком-то более простом?

_____________
матфак вгу и остальная классика =)

Не совсем так, как на вики.

Выбираем конкретный набор индексов. Действуем на него всеми различными степенями
выбранной подстановки, и получаем орбиту.

Например, если выбран элемент $a_{ijkm}$ со значениями инедксов $ijkm$, и подстановку
индексов $(1 \ 2 \ 3)$, то получим $a_{jkim}$ и $a_{kijm}$.

И если $i,\ j, \ k, \ m$ попарно различны, то получим орбиту
$$
\{a_{ijkm}, \ a_{jkim}, \ a_{kijm}\}.
$$

vedro-compota's picture

И если $i,\ j, \ k, \ m$ попарно различны, то получим орбиту
$$
\{a_{ijkm}, \ a_{jkim}, \ a_{kijm}\}.
$$

вроде в данной ситуации (чтобы получить орбиту $\{a_{ijkm}, \ a_{jkim}, \ a_{kijm}\}$) достаточно потребовать попарной различности лишь первых трёх, т.е. $i,\ j, \ k$ -- так как $m$ всё равно на месте, или нет?

_____________
матфак вгу и остальная классика =)

Да, достаточно лишь первых трёх.

Но я и не говорил, что это необходимо, чтобы все четыре были попарно различны.

Но, к примеру, для $a_{1214}$ получим
$$
\{ a_{1214}, \ a_{2114},\ a_{1124} \}.
$$
Поэтому и для первых трёх это не всегда необходимо.

Исходный тензор задан так:

        self.mtx[0, 0, 0] = 1;  # главная диагональ
        self.mtx[1, 0, 0] = 2;
        self.mtx[1, 1, 0] = 3;  
        self.mtx[0, 1, 0] = 4; # в плоскости главной диагонали
        self.mtx[0, 0, 1] = 5; 
        self.mtx[1, 0, 1] = 6; # в плоскости главной диагонали
        self.mtx[1, 1, 1] = 7; # главная диагональ
        self.mtx[0, 1, 1] = 8;

Перепишем это в виде таблицы, чтобы явно указать номера индексов: 1, 2 и 3:

Номер индекса $\Large a_{ijk}$
1 2 3
0 0 0 1
0 0 1 5
0 1 0 4
0 1 1 8
1 0 0 2
1 0 1 6
1 1 0 3
1 1 1 7

Для записи

init: 
 [[[1 5]
  [4 8]]

 [[2 6]
  [3 7]]]

можно тоже составить таблицу с явным указанием индексов:

Номер индекса Индекс номер 3 есть индекс для этих списков
1 2
0 0 [1 5]
0 1 [4 8]
1 0 [2 6]
1 1 [3 7]

После numpy.transpose() получаем

Номер индекса $\Large a_{ijk}$
1 2 3
0 0 0 1
0 0 1 2
0 1 0 4
0 1 1 3
1 0 0 5
1 0 1 6
1 1 0 8
1 1 1 7

Возможно,

By default, reverse the dimensions,

означает, что в результате индексы записываются в обратном порядке. Например,
если было 1 2 3, то станет 3 2 1.
Это соответствует подстановке индексов (или номеров индексов)
$$
\begin{pmatrix}
1 & 2 & 3 \\
3 & 2 & 1
\end{pmatrix}.
$$
Это транспозиция $(1\ 3)$. В исходной таблице меняются местами столбцы Индекс 1 и Индекс 3 .

vedro-compota's picture

технический момент по поводу отображения таблиц.

_____________
матфак вгу и остальная классика =)

vedro-compota's picture

By default, reverse the dimension......

означает, что в результате индексы записываются в обратном порядке. Например,
если было 1 2 3, то станет 3 2 1.

То есть фактически тут применяется подстановка индексов для каждого элемента, и мы можем задать, какую именно применять, да?
А если не зададим, то будет выбрана какая-нибудь.

_____________
матфак вгу и остальная классика =)

То есть фактически тут применяется подстановка индексов для каждого элемента, и мы можем задать, какую именно применять, да?

Да.

А если не зададим, то будет выбрана какая-нибудь.

Если это так, то по умолчанию будет выбрана подстановка
$$
\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's picture

Выходит, что для реализации универсального алгоритма превращения произвольной матрицы в самосопряжённую нужно с учетом конкретной подстановки определить:

  1. "Неподвижную область" -- ту где числа придётся сделать с нулевой мнимой частью (в двумерном случае это сама главная диагональ)
  2. Условие нахождения "над" неподвижной областью -- чтобы понять что именно отражать в симметричные элементы
  3. Поиск симметричного элемента

Примечание: ответ для транспозиции есть здесь.

Правда, при этом совершенно непонятна ситуация: пусть к нас 4-х мерная матрица,
тогда подстановка $[4, 3, 2, 1]$ переместит все элементы кроме главной диагонали?
То есть тут придётся строить осевую симметрию?

_____________
матфак вгу и остальная классика =)

Правда, при этом совершенно непонятна ситуация: пусть к нас 4-х мерная матрица,
тогда подстановка [4,3,2,1] переместит все элементы кроме главной диагонали?
То есть тут придётся строить осевую симметрию?

Это смотря, что подразумевается под записью [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's picture

Это смотря, что подразумевается под записью $[4,3,2,1]$

да, я как раз подразумевал просто подстановку (обратный порядок):
$\begin{pmatrix} 1& 2 & 3 & 4\\ 4& 3& 2& 1\end{pmatrix}$

Но порядок этой
подстановки равен $4$, то есть больше двух.

В данном случае обмен местами относительно куба размерности $n-1$ требует чтобы подстановка имела порядок равный $2$? Что именно даёт нам требование, чтобы порядок был =$2$.

Ответ: прочитал выше, если порядок не будет = 2, получится, что это не транспонирование -- так как тогда обратная операция не вернёт всё назад.

_____________
матфак вгу и остальная классика =)

так как тогда обратная операция не вернёт всё назад.

Та же операция не вернёт всё назад.

vedro-compota's picture

но ведь

обратной для этой подстановки является она сама

-- почему не вернёт?

В смысле если мы применим эту операцию (подстановку для индексов каждого элемента) ещё раз -- получим исходную матрицу, разве нет?

_____________
матфак вгу и остальная классика =)

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

vedro-compota's picture

Согласен. Понял.

_____________
матфак вгу и остальная классика =)