Skip to main content
 首页 » 编程设计

python之从列表构造 numpy 数组

2025年05月04日9cmt

我有一个元组列表如下:

[(x,{'y':'1,3','z':'2'}), 
(y,{'a':'4'}), 
(z,{'b':'2,3'})] 

我需要将其转换为 numpy 数组格式,如下所示:

    x   y   z   a   b 
x   0   1,3 2   0   0 
y   1,3 0   0   4   0 
z   2   0   0   0   2,3 
a   0   4   0   0   0 
b   0   0   2,3 0   0 

为了支持这一点,将节点名称存储为列表以给它们映射索引。

[x,y,z,a,b] 

给定索引 - 从该结构创建 numpy 数组的最有效方法是什么?
此外 - 当新条目进入原始元组列表时,它将适本地添加到索引列表和 numpy 数组中。

现有元素的编辑不会发生。

感谢您的帮助。

请您参考如下方法:

如果您使用object dtypes,您可以按照下面的方法构建您的数组。由于您需要 2D 对称性,因此首先创建 2D 数组并由此构建结构化数组会更容易:

import numpy as np 
o = ['x','y','z','a','b'] 
a = np.zeros((len(o),len(o)),dtype=object) 
s  =[('x',{'y':'1,3','z':'2'}), ('y',{'a':'4'}), ('z',{'b':'2,3'})] 
for vi in s: 
    i = o.index(vi[0]) 
    for vj in vi[1].items(): 
        j = o.index(vj[0]) 
        a[i,j] = vj[1] 
        a[j,i] = a[i,j] 
 
# building the structured array 
b = np.zeros((len(o),), dtype=[(i,object) for i in o]) 
for i,vi in enumerate(o): 
    b[vi] = a[i,:] 
 
# building a dictionary to access the values 
d = dict(( (vi, dict(( (vj, a[i,j]) for j,vj in enumerate(o) ))) for i,vi in enumerate(o) ))