Python 如何使用numpy或THANO将一个矩阵的整数值用作另一个矩阵的索引?
我有以下4个形状相同的矩阵:(1)包含整数值的矩阵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元素的值。我这
I
,(2)包含整数值的矩阵J
,(3)包含浮点值的矩阵D
,(4)包含浮点值的矩阵V
我想用这4个矩阵按以下方式构造一个“输出”矩阵:
i
、j
的值,请查找矩阵i
中等于i
的所有单元格(元素)以及矩阵j
中等于j
的所有单元格(元素)I
和J
具有相同的形状)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]])