Конвертировать массив массивов в матрицу - PullRequest
0 голосов
/ 02 декабря 2011

В моем приложении много смысла переносить матрицы матриц. Поскольку numpy это не нравится, а работа с массивами в большинстве случаев легче, в итоге я получил массивы массивов. Я вполне доволен ими.

Это выглядит так:

    [ [S11hh S11hv] [S12hh S12hv] ]
    [ [S11vh S11vv] [S12vh S12vv] ]
S = [                             ]
    [ [S21hh S21hv] [S22hh S22hv] ]
    [ [S21vh S21vv] [S22vh S22vv] ]

(Это для коэффициентов отражения и пропускания в горизонтальной и вертикальной поляризациях, это оптика.)

Однако в какой-то момент в моем коде мне нужно выполнить умножение матриц, используя все S, а не только его части:

M = S.dot(L)

где L выглядит так:

    [ [L1hh L1hv] ]
    [ [L1vh L1vv] ]
L = [             ]
    [ [L2hh L2hv] ]
    [ [L2vh L2vv] ]

Если я наивно бегу

M = S.dot(L)

Я получаю что-то в 6 измерениях, а это не то, чего я хочу. На самом деле я ожидаю, что результат будет точно таким же, как если бы мои массивы были просто матрицами:

    [ S11hh S11hv S12hh S12hv ]
    [ S11vh S11vv S12vh S12vv ]
S = [ S21hh S21hv S22hh S22hv ]
    [ S21vh S21vv S22vh S22vv ]

    [ L1hh L1hv ]
    [ L1vh L1vv ]
L = [ L2hh L2hv ]
    [ L2vh L2vv ]

Тогда я бы перегруппировал элементы 4 на 4.

Что представляет собой элегантный цифровой способ создания матриц из этих массивов? Я пробовал bmat, но bmat не доволен тем, что у меня есть; по какой-то причине он хорошо работает со списком матриц, но не с массивом 4D.

Ответы [ 2 ]

0 голосов
/ 02 декабря 2011

Поскольку существует трюк с транспозицией (транспонирование матрицы или матрицы НЕ является транспозицией большой эквивалентной матрицы), и поскольку bmat хмурится на исходной структуре данных, я придумал этот код:1002 *

Я заново изобретаю колесо?

0 голосов
/ 02 декабря 2011

Вы можете создать одну большую матрицу вместо массива массивов (для этого вы можете использовать bmat). Это позволит продукт большой точки. Затем вы можете ссылаться на каждую субматрицу с разрезом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...