Создав тензор N-го порядка, сведите тензор NxNxN 3-го порядка в матрицу N ^ 3x1, отсортируйте матрицу по третьему элементу каждого вектора - PullRequest
1 голос
/ 10 марта 2020

Я пытался сделать то, что называется переупорядочением собственных значений. Чтобы сделать это, мне нужно сделать что-то, что в Wolfram Mathematica выглядит следующим образом:

lambdax[n_]:=n*Pi/2;

lambday[m_]:=m*Pi/2;

bii=(7 ((n^2 \[Pi]^2)/4 + 3/14 n \[Pi] Sin[(n \[Pi])/2] + 
   3/28 Sin[(n \[Pi])/2]^2 - 3/14 n \[Pi] Sin[(3 n \[Pi])/2] - 
   3/14 Sin[(n \[Pi])/2] Sin[(3 n \[Pi])/2] + 
   3/28 Sin[(3 n \[Pi])/2]^2 - 1/7 n \[Pi] Sin[2 n \[Pi]] + 
   1/28 Sin[2 n \[Pi]]^2))/(4 n^2 \[Pi]^2);

Reordbii=Flatten[Table[{n,m,(lambdax[n]^2+lambday[m]^2)/bii},{n,NN},{m,NN}],1];

Lambdabii = Sort[Reordbii, #1[[3]] < #2[[3]] &];

Lambdatakebii = Take[Lambdabii, NN];

Команда «Reordbii» запускает двумерный список, а затем сглаживает его в NN ^ 2 векторов размерности 1x3. Затем команда "Lambdabii" сортирует векторы NN ^ 2 на основе возрастающего порядка третьего элемента каждого вектора, то есть (lambdax [n] ^ 2 + lambday [m] ^ 2) / bii. Затем команда «Lambdatakebii» принимает первые NN векторов «Lambdabii». В настоящее время я новичок в Python, но я думаю, что этот простой алгоритм будет работать быстрее. Тем не менее, я не знаю, как я мог сделать это в Python. Я хотел переписать код в Python, чтобы запустить его на Colab. Кто-нибудь знает, как мне здесь помочь? Спасибо!

...