Python n维矩阵的递推

Python n维矩阵的递推,python,matrix,Python,Matrix,我正在用Python 3进行一些实现,我需要一些帮助。我有一个函数,它依赖于矩阵的维数。实际上我有两个矩阵,我想以某种方式得到第三个矩阵。例如(二维矩阵): def my_matrix_2d(mat1、mat2): ar=[] 对于范围内的i(len(mat1[0]): ar1=[] 对于范围内的j(len(mat1[1]): 尝试: ar1.追加([mat1[0][i]、mat1[1][j]、mat2[i][j]) 除索引器外: ar1.追加([mat1[0][i],mat1[1][j],无]

我正在用Python 3进行一些实现,我需要一些帮助。我有一个函数,它依赖于矩阵的维数。实际上我有两个矩阵,我想以某种方式得到第三个矩阵。例如(二维矩阵):

def my_matrix_2d(mat1、mat2):
ar=[]
对于范围内的i(len(mat1[0]):
ar1=[]
对于范围内的j(len(mat1[1]):
尝试:
ar1.追加([mat1[0][i]、mat1[1][j]、mat2[i][j])
除索引器外:
ar1.追加([mat1[0][i],mat1[1][j],无])
ar.append(ar1)
返回ar
三维矩阵的另一个示例:

def my_matrix_3d(mat1、mat2):
ar=[]
对于范围内的i(len(mat1[0]):
ar1=[]
对于范围内的j(len(mat1[1]):
ar2=[]
对于范围内的k(len(mat1[2]):
尝试:
ar2.追加([mat1[0][i]、mat1[1][j]、mat1[2][k]、mat2[i][j][k])
除索引器外:
ar2.追加([mat1[0][i],mat1[1][j],mat1[2][k],无])
ar1.追加(ar2)
ar.append(ar1)
返回ar
我需要做一个n维矩阵的一般函数。我知道这一定是递归,但我就是搞不懂。 我将感谢任何帮助

编辑:

事实上,我没有很好地描述我的问题,所以我将尝试给出详细的描述。首先,我将描述二维问题。我有两个矩阵,mat1和mat2。len(mat1)=2,假设len(mat1[0])=m和len(mat1[1])=n。然后,mat2是mxn矩阵,因此len(mat2)=m,len(mat2[i])=n表示i=0,1,…,m-1。我的矩阵是函数,它以某种方式结合了这两个矩阵。让我们看一个具体的例子:我们可以将mat1视为二维直方图的箱子边,将mat2视为箱子高度,因此mat1[0]表示x坐标中的箱子边,将mat1[1]表示y坐标中的箱子边。mat2表示x坐标和y坐标边缘交点上的箱子高度。因此,我的_矩阵_2d在二维柱状图中存储有关箱子边缘和箱子高度的信息。它的元素是向量(mat1[0][i]、mat1[1][j]、mat2[i][j]),因为我们还需要一条边来确定箱子的宽度,所以最后的向量是(mat1[0][i]、mat1[1][j]、无)

在3D示例中类似。mat1[0](len=m)是x坐标中的料仓边,mat1[1](len=n)是y坐标中的料仓边,mat1[2](len=o)是z坐标中的料仓边,mat2是包含料仓高度的mxnxo矩阵。my_matrix_3d输出应该是包含元素(mat1[0][i]、mat1[1][j]、mat1[2][k]、mat2[i][j][k])的矩阵/数组,其中i=0、…、m-2、j=0、…、n-2、k=0、…、o-2,如果i=m-1或j=n-1或k=o-1,矩阵中的元素应该是(mat1[0][i]、mat1[1][j]、mat1[k],无)

另外,我的矩阵应该是n维矩阵,它的形状与mat2相同。但是mat2中的元素是浮点数,而my_矩阵中的元素是len(mat1)+1向量

编辑2:

我举了一个具体的例子(2D):

mat1=[
阵列([-82.8894492,-56.07043142,-29.25141365,-2.43239587,24.3866219,51.20563967,78.02465745]),
数组([-191.15188724,-103.20853717,-15.2651871,72.67816297,160.62151304,248.56486311])
]
mat2=数组([[4.23988548e-08,3.39190838e-07,1.27196564e-07,1.27196564e-07,0.00000000 E+00],
[1.22956679e-06、8.35257440e-06、1.53483854e-05、4.45187976e-06、,
1.69595419e-07],
[5.00306487e-06、4.77835094e-05、8.47553108e-05、2.31073759e-05、,
1.05997137e-06],
[5.13026143e-06、5.8001634E-05、9.37862668e-05、2.62872900e-05、,
1.01757252e-06],
[1.14476908e-06、1.44156106e-05、2.33617690e-05、6.52942364e-06、,
2.54393129e-07],
[0.00000000e+00,5.93583967e-07,1.10237023e-06,4.23988548e-07,
4.23988548e-08]]
输出:
[
[[-82.88944919513716,-191.1518872423128,4.239885481812237576E-08],
[-82.88944919513716,-103.2085371726906,3.391908384979006e-07],
[-82.88944919513716,-15.265187103077324,1.2719656443671272e-07],
[-82.88944919513716、72.67816296654041、1.2719656443671272e-07],
[-82.88944919513716, 160.62151303615815, 0.0],
[-82.88944919513716248.56486310577586,无]],
[[-56.07043142169904,-191.1518872423128,1.229567895548898E-06],
[-56.07043142169904,-103.2085371726906,8.352574398010803e-06],
[-56.07043142169904,-15.265187103077324,1.534838544203e-05],
[-56.07043142169904、72.67816296654041、4.451879755284945e-06],
[-56.07043142169904、160.62151303615815、1.6959541924895036e-07],
[-56.070431421699042048.56486310577586,无]],
[[-29.25141364826092,-191.1518872423128,5.003064867844034e-06],
[-29.25141364826092,-103.2085371726906,4.7783509373391746e-05],
[-29.25141364826092,-15.265187103077324,8.475531076966292e-05],
[-29.25141364826092、72.67816296654041、2.3107375872669477e-05],
[-29.25141364826092、160.62151303615815、1.05997137030359398E-06],
[-29.25141364826092,248.56486310577586,无]],
[2.4323958748228023,-191.1518872423128,5.130261432280746e-06],
[-2.4323958748228023,-103.2085371726906,5.80016333383141E-05],
[-2.43239587748228023,-15.265187103077324,9.378626684466952e-05],
[-2.43239587748228023、72.67816296654041、2.628728998358729e-05],
[-2.4323958748228023、160.62151303615815、1.0175725154937022e-06],
[-2.432395874828023248.56486310577586,无]],
[24.386621898615317,-191.1518872423128,1.144769079930414e-06],
[24.386621898615317,-103.2085371726906,1.44156363616160767E-05],
[24.386621898615317,-15.265187103077324,2.336176900154289e-05],
[24.386621898615317、72.67816296654041、6.529423641084582e-06],
[24.386621898615317、160.62151303615815、2.543931288734254e-07],
[24.386621898615317,248.56486310577586,无]],
[[51.20563967205345, -191.1518872423128, 0.0],
[51.20563967205345,-103.2085371726906,5.935839673713263e-07],
[51.2056396205345,-15.265187103077324,1.10237022181777E-06],
[51.2056396705345、72.67816296654041、4.239885481812237604E-07],
[51.2056396705345、160.62151303615815、4.239885481812237616E-08],
[51.20563967205345, 248.564863
def lookup(m,ii):
  try:
    for i in ii: m=m[i]
  except IndexError: m=None
  return m
def edge_product(mat1,mat2,path=[]):
  return [edge_product(mat1,mat2,path+[i])\
          for i in range(len(mat1[len(path)]))]\
    if len(path)<len(mat1) else\
    [mat1[i] for i in path]+[lookup(mat2,path)]