Python 如何使用numpy或THANO将一个矩阵的整数值用作另一个矩阵的索引?

Python 如何使用numpy或THANO将一个矩阵的整数值用作另一个矩阵的索引?,python,numpy,theano,Python,Numpy,Theano,我有以下4个形状相同的矩阵:(1)包含整数值的矩阵I,(2)包含整数值的矩阵J,(3)包含浮点值的矩阵D,(4)包含浮点值的矩阵V 我想用这4个矩阵按以下方式构造一个“输出”矩阵: 要查找输出矩阵的元素i、j的值,请查找矩阵i中等于i的所有单元格(元素)以及矩阵j中等于j的所有单元格(元素) 仅使用满足这两个条件的单元格(记住矩阵I和J具有相同的形状) 在“选定”单元格中搜索具有最小值D的单元格 取找到的单元格(最小值为D),检查它在矩阵V中的值 这样我们就可以找到输出矩阵的i,j元素的值。我这

我有以下4个形状相同的矩阵:(1)包含整数值的矩阵
I
,(2)包含整数值的矩阵
J
,(3)包含浮点值的矩阵
D
,(4)包含浮点值的矩阵
V

我想用这4个矩阵按以下方式构造一个“输出”矩阵:

  • 要查找输出矩阵的元素
    i
    j
    的值,请查找矩阵
    i
    中等于
    i
    的所有单元格(元素)以及矩阵
    j
    中等于
    j
    的所有单元格(元素)
  • 仅使用满足这两个条件的单元格(记住矩阵
    I
    J
    具有相同的形状)
  • 在“选定”单元格中搜索具有最小值
    D
    的单元格
  • 取找到的单元格(最小值为D),检查它在矩阵
    V
    中的值
  • 这样我们就可以找到输出矩阵的
    i
    j
    元素的值。我这样做是为了所有的
    都是
    js

    我想用numpy或Theano解决这个问题

    当然,我可以循环所有的I_和j_,但我认为(希望)应该有一个更有效的方法

    已添加

    根据要求,我提供了一个例子:

    以下是矩阵I:

     0   1   2
     1   1   0
     0   0   2
    
    以下是矩阵J:

     1   1   1
     1   2   1
     0   1   0
    
    以下是矩阵D:

     1.2   3.4   2.2
     2.2   4.3   2.3
     7.1   6.1   2.7
    
    最后我们得到了矩阵V:

     1.1   8.1   9.1
     3.1   7.1   2.1
     0.1   5.1   3.1
    
    如您所见,所有4个矩阵都具有相同的形状(3 x 4),但它们可以具有另一个形状(例如2 x 5)。主要的是,所有4个矩阵的形状都是相同的

    我们可以看到矩阵
    I
    的值从0到2,因此,输出矩阵应该有3行。同样,我们可以得出结论,输出矩阵应该有3列(因为矩阵
    J
    的值也在0到2之间)

    让我们首先找到输出矩阵的元素(0,1)。在
    I
    矩阵中,以下单元格(用x标记)包含0

     x   .   .
     .   .   x
     x   x   .
    
    在矩阵
    J
    中,以下元素包含1:

     x   x   x
     x   .   x
     .   x   .
    
    这两组单元格的交点为:

     x   .   .
     .   .   x
     .   x   .
    
    相应的距离为:

     1.2    .     . 
      .     .    2.3
      .    6.1    . 
    
    因此,最小距离位于左上角。因此,我们从矩阵的左上角取值
    V
    (该值为1.1)


    这就是我们如何找到输出矩阵的(0,1)元素的值。我们对所有可能的索引组合(总共有3 x 3=9)执行相同的过程。对于某些组合,我们找不到任何值,在这种情况下,我们将值设置为等于-

    样本输入、输出-

    In [136]: I = np.array([[0,1,2],[1,1,0],[0,0,2]])
         ...: J = np.array([[1,1,1],[1,2,1],[0,1,0]])
         ...: D = np.array([[1.2, 3.4, 2.2],[2.2, 4.3, 2.3],[7.1, 6.1, 2.7]])
         ...: V = np.array([[1.1 , 8.1, 9.1],[3.1, 7.1, 2.1],[0.1, 5.1, 3.1]])
         ...: 
    
    In [144]: out
    Out[144]: 
    array([[ 0.1,  1.1,  1.1], # To verify : v[0,1] = 1.1
           [ 1.1,  3.1,  7.1],
           [ 3.1,  9.1,  1.1]])
    
    In [136]: I = np.array([[0,1,2],[1,1,0],[0,0,2]])
         ...: J = np.array([[1,1,1],[1,2,1],[0,1,0]])
         ...: D = np.array([[1.2, 3.4, 2.2],[2.2, 4.3, 2.3],[7.1, 6.1, 2.7]])
         ...: V = np.array([[1.1 , 8.1, 9.1],[3.1, 7.1, 2.1],[0.1, 5.1, 3.1]])
         ...: 
    
    In [144]: out
    Out[144]: 
    array([[ 0.1,  1.1,  1.1], # To verify : v[0,1] = 1.1
           [ 1.1,  3.1,  7.1],
           [ 3.1,  9.1,  1.1]])