MapThread用于任何变量组合

时间:2011-04-17 20:32:02

标签: wolfram-mathematica

我有一组常规(mod 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。

E.g。让N2 = {A,B}

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

将返回{B ^ 2,A ^ 2},而我希望它返回N2中的任何矩阵乘积,即{A ^ 2,AB,BA,B ^ 2}。

2 个答案:

答案 0 :(得分:4)

我不确定我是否理解你的问题,但如果你想要获得两个矩阵A,B的所有组合,你可以使用元组结合Apply(你可以使用带方括号的函数形式或正如许多人在最初的隐秘前缀运算符中所做的那样@@@ =在1级申请:

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

Out [24] = {A.A,A.B,B.A,B.B}

答案 1 :(得分:3)

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