MapThread для любой комбинации переменных - PullRequest
2 голосов
/ 18 апреля 2011

У меня есть набор регулярных (mod 5) матриц N2, и я хотел бы получить группу, сгенерированную этими матрицами в Mathematica: Мой подход состоял в том, чтобы использовать функцию f, делающую матричное умножение, и g для мода 5, а затем я хотел использовать MapThread

M= Function[{x,y},x.y];
g = Function[z, Mod[z, 5]]
g /@ MapThread[M, {N2,N2}]

Проблема в том, что MapThread вставляет только пары элементов, которые находятся в одной и той же позиции в списках. Я хотел бы вставить любую пару элементов в N. Чтобы получить группу, сгенерированную матрицами в N, я бы просто повторил это и обновлял N2 каждый раз.

например. пусть N2 = {A, B}

g /@ MapThread[M, {N2,N2}]

вернул бы {B ^ 2, A ^ 2}, а я хочу, чтобы он возвращал любое произведение матриц в N2, то есть {A ^ 2, AB, BA, B ^ 2}.

Ответы [ 2 ]

4 голосов
/ 18 апреля 2011

Я не уверен, понимаю ли я ваш вопрос, но если вы хотите получить все комбинации двух матриц A, B, вы можете использовать кортежи в сочетании с Apply (который вы можете использовать в его функциональной форме с квадратными скобками иликак многие здесь делают в форме загадочного префиксного оператора @@@ = ​​применить на уровне 1):

В [24]: = Dot @@@ Tuples [{A, B}, 2]

Out [24] = {AA, AB, BA, BB}

3 голосов
/ 18 апреля 2011

В этом случае вам нужно Outer:

In[27]:= n = RandomInteger[{1, 5}, {3, 2, 2}];

In[28]:= Outer[mFunc, n, n, 1]

Out[28]= {{mFunc[{{3, 5}, {2, 4}}, {{3, 5}, {2, 4}}], 
  mFunc[{{3, 5}, {2, 4}}, {{3, 4}, {4, 3}}], 
  mFunc[{{3, 5}, {2, 4}}, {{4, 4}, {5, 1}}]}, {mFunc[{{3, 4}, {4, 
     3}}, {{3, 5}, {2, 4}}], 
  mFunc[{{3, 4}, {4, 3}}, {{3, 4}, {4, 3}}], 
  mFunc[{{3, 4}, {4, 3}}, {{4, 4}, {5, 1}}]}, {mFunc[{{4, 4}, {5, 
     1}}, {{3, 5}, {2, 4}}], 
  mFunc[{{4, 4}, {5, 1}}, {{3, 4}, {4, 3}}], 
  mFunc[{{4, 4}, {5, 1}}, {{4, 4}, {5, 1}}]}}

In[29]:= n

Out[29]= {{{3, 5}, {2, 4}}, {{3, 4}, {4, 3}}, {{4, 4}, {5, 1}}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...