我有一组常规(模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/