Учитывая тензор ранга 4 (каждый ранг с размерностью K
), например, T(p,q,r,s)
, мы можем отобразить 1-к-1 все элементы тензора в матрицу размерности K^2 x K^2
, например, * 1004.* в котором два первых индекса тензора p,q
и два последних индекса r,s
объединены в столбце по принципу:
i = p + K * q
j = r + K * s
Использование, например, некоторых (анти) симметрий данного тензораT(p,q,r,s) = -T(q,p,r,s) = -T(p,q,s,r) = T(q,p,s,r)
и T(p,q,r,s) = T(r,s,p,q)
, мы хотели бы иметь возможность построить матрицу H(m,n)
, которая содержит только уникальные элементы (т.е. те, которые не связаны ранее определенными симметриями), такие, что p>q
и r>s
вматрица H(m,n)
, которая тогда будет иметь размерность K(K-1)/2 x K(K-1)/2
.
Как мы можем найти алгоритм (или даже лучше: как мы можем использовать библиотеку C ++ Eigen) для выполнения этих преобразований индекса?Кроме того, можем ли мы записать m
и n
алгебраически в терминах p,q
и r,s
, как мы можем это сделать в случае, когда мы хотим извлечь строгую нижнюю треугольную матрицу (без диагонали) в вектор