gpt4 book ai didi

python - 从 Python 数组创建 NxM 索引

转载 作者:太空宇宙 更新时间:2023-11-03 17:37:59 26 4
gpt4 key购买 nike

我想要一个 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,:]

最佳答案

来自您的评论:

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])

您也可以循环遍历已解开的 x,但随后您必须以另一种方式推导出坐标。

关于python - 从 Python 数组创建 NxM 索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30956542/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com