从列表访问列表

2024-04-26 17:54:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我想让一个邻接矩阵成为一个给定的双邻接矩阵B。 让矩阵B = np.array([[1,2,3],[10,20,30],[3,4,5],[50,12,36],[5,6,7],[3,4,5]])及其转置Bt = np.transpose(B)。 设两个零矩阵Z,Zt分别为(6,6)和(3,3)。 所以A = [[Z,B],[Bt,Zt]]。但这是一个列表及其元素:

[[array([[ 0.,  0.,  0.,  0.,  0.,  0.],
   [ 0.,  0.,  0.,  0.,  0.,  0.],
   [ 0.,  0.,  0.,  0.,  0.,  0.],
   [ 0.,  0.,  0.,  0.,  0.,  0.],
   [ 0.,  0.,  0.,  0.,  0.,  0.],
   [ 0.,  0.,  0.,  0.,  0.,  0.]]), array([[ 1,  2,  3],
   [10, 20, 30],
   [ 3,  4,  5],
   [50, 12, 36],
   [ 5,  6,  7],
   [ 3,  4,  5]])], [array([[ 1, 10,  3, 50,  5,  3],
   [ 2, 20,  4, 12,  6,  4],
   [ 3, 30,  5, 36,  7,  5]]), array([[ 0.,  0.,  0.],
   [ 0.,  0.,  0.],
   [ 0.,  0.,  0.]])]].

但是我想要这样的东西:

 [0.,  0.,  0.,  0.,  0., 0.,  1,  2,  3
  0.,  0.,  0.,  0.,  0., 0., 10, 20, 30
  0.,  0.,  0.,  0.,  0., 0., 3,  4,  5
  0.,  0.,  0.,  0.,  0., 0., 50, 12, 36
  0.,  0.,  0.,  0.,  0., 0., 5,  6,  7
  0.,  0.,  0.,  0.,  0., 0., 3,  4,  5
  1,   10,  3, 50,  5,  3,  0.,  0.,  0.
  2,   20,  4, 12,  6,  4,  0.,  0.,  0.
  3,   30,  5, 36,  7,  5,  0.,  0.,  0.]

我试过用列表理解法,但结果不正确。 如果我有原来的图形,我可以使用NetworX包,但我现在不能。 你知道一种方法来构造一个模型吗?你知道吗


Tags: 方法模型图形元素列表np矩阵array
2条回答

您试图实现的是连接,而您的代码(以及问题开头的符号)都是关于创建多维对象的:

>>> X = np.ones((3, 6))
>>> Y = np.ones((6, 3)) * 2
>>> Z1 = np.zeros((6,6))
>>> Z2 = np.zeros((3,3))
>>> 
>>> np.vstack((Z1, X))
array([[ 0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.],
       [ 1.,  1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.,  1.]])
>>> np.vstack((Y, Z2))
array([[ 2.,  2.,  2.],
       [ 2.,  2.,  2.],
       [ 2.,  2.,  2.],
       [ 2.,  2.,  2.],
       [ 2.,  2.,  2.],
       [ 2.,  2.,  2.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])
>>> np.hstack((np.vstack((Z1, X)), np.vstack((Y, Z2))))
array([[ 0.,  0.,  0.,  0.,  0.,  0.,  2.,  2.,  2.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  2.,  2.,  2.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  2.,  2.,  2.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  2.,  2.,  2.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  2.,  2.,  2.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  2.,  2.,  2.],
       [ 1.,  1.,  1.,  1.,  1.,  1.,  0.,  0.,  0.],
       [ 1.,  1.,  1.,  1.,  1.,  1.,  0.,  0.,  0.],
       [ 1.,  1.,  1.,  1.,  1.,  1.,  0.,  0.,  0.]])

bmat函数使得用其他矩阵构造矩阵非常容易,因此

A = np.bmat([[Z, B], [Bt, Zt]]).A

生成一个与您指定的完全相同的A。你知道吗

相关问题 更多 >