从Python数组创建NxM索引

时间:2015-06-20 16:48:25

标签: python numpy indexing

我想采用NxM矩阵,为简单起见,我们将使用

x=np.arange(25).reshape((5,5))

我想创建一个新矩阵A,在其中我可以为第一行中的每个元素存储节点,第二行中的N方向索引,第三行中的M方向索引,和第四行中的元素实际值。但是,我很难找到如何创建一个容器,它可以保存所有这些值,而不必提前知道它们的确切长度(如在最终脚本中,如果它们位于一个开头矩阵中,则它们将被排除在外。阈) 所以,例如,可能是这样的: (使用networkx作为图/节点方法,文档:http://networkx.github.io/

import networkx as nx
import numpy as np
A=[]
g=nx.Graph()
x2=np.ravel(x,order='C')
for k in x2:
    A[0,:]=g.add_node(k)
    A[3,:]=x2[k]

for i in length(x):
    for j in height(x):#also not sure how to return height/number of sub arrays
        x[i]=A[1,:]
        x[j]=A[2,:]

1 个答案:

答案 0 :(得分:1)

来自你的评论:

x = np.arange(25).reshape((5,5)) 
A = [[node0,node1,...node24], 
     [column index for each node above from 0 to 24], 
     [row index for each node from 0 to 24], 
     [value for each node from 0 to 24]]

收集此类信息的一种简单方法是循环播放

A = []
for i in range(x.shape[0]):
    for j in range(x.shape[1]):
        if x[i,j] too small:
             continue
        a='node(%s,%s)'%(i,j),i,j,x[i,j]
        A.append(a)

生成一个元组列表,如:

[('node(0,0)', 0, 0, 0),
 ('node(0,1)', 0, 1, 1),
 ('node(0,2)', 0, 2, 2),
 ('node(0,3)', 0, 3, 3),
 ...
 ]

可以使用

将其转换为结构化数组
M=np.array(A,dtype='O,i,i,f')

array([('node(0,0)', 0, 0, 0.0), ('node(0,1)', 0, 1, 1.0),
       ('node(0,2)', 0, 2, 2.0), ('node(0,3)', 0, 3, 3.0),
       ('node(0,4)', 0, 4, 4.0), ('node(1,0)', 1, 0, 5.0),
       ('node(1,1)', 1, 1, 6.0), ('node(1,2)', 1, 2, 7.0),
       ....
       ('node(4,4)', 4, 4, 24.0)], 
      dtype=[('f0', 'O'), ('f1', '<i4'), ('f2', '<i4'), ('f3', '<f4')])

可以使用M['f3']等访问字段。

[M['f0'],M['f1'],M['f2'],M['f3']]生成A列表 - 数组列表。

制作4个列表清单的更直接方式:

A = [[],[],[],[]]
for i in range(x.shape[0]):
    for j in range(x.shape[1]):
        A[0].append('node(%s,%s)'%(i,j))
        A[1].append(i)
        A[2].append(j)
        A[3].append(x[i,j])

你也可以循环使用ra x,但是你必须以另一种方式推断坐标。

相关问题