我想采用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,:]
答案 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
,但是你必须以另一种方式推断坐标。