来自现有的第2列的新数组从现有的第3列中开始行/列的索引,第三列是值

时间:2018-02-13 20:01:22

标签: python arrays numpy

这是我正在努力解决的一些代码。

我的目标是从现有的一个(t)创建一个数组(db),在db中,每一行代表一个值t。 db将有3列,1表示t中的行索引,1表示t中的列索引,1表示t中的值。

在我的情况下,t是距离矩阵,因此对角线是0并且它是对称的,我用0替换了下三角值。我在新数组中不需要0值但是我可以在另一步中删除它们

import numpy as np

t = np.array([[0, 2.5],
              [0, 0]])

我的目标是获得一个新阵列,例如:

db = np.array([[0, 0, 0], 
              [0, 1, 2.5],  
              [1, 0, 0], 
              [1, 1, 0]])

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

您可以为行和列创建meshgrid个2D坐标,然后将这些坐标展开为1D数组。然后,您可以将这两个数组以及展开的t版本连接成一个最终矩阵:

import numpy as np
(Y, X) = np.meshgrid(np.arange(t.shape[1]), np.arange(t.shape[0]))
db = np.column_stack((X.ravel(), Y.ravel(), t.ravel()))

运行示例

In [9]: import numpy as np

In [10]: t = np.array([[0, 2.5],
    ...:               [0, 0]])

In [11]: (Y, X) = np.meshgrid(np.arange(t.shape[1]), np.arange(t.shape[0]))

In [12]: db = np.column_stack((X.ravel(), Y.ravel(), t.ravel()))

In [13]: db
Out[13]:
array([[ 0. ,  0. ,  0. ],
       [ 0. ,  1. ,  2.5],
       [ 1. ,  0. ,  0. ],
       [ 1. ,  1. ,  0. ]])