我有一组常规(模5)矩阵N2,我想在Mathematica中获得由这些矩阵生成的组:
我的方法是使用函数f进行矩阵乘法,使用g进行mod 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}。

最佳答案

在这种情况下,您需要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}}}

关于wolfram-mathematica - MapThread用于变量的任意组合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5696238/

10-10 15:01