Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 嵌套字典中包含的向量的相关性_Python_Loops_Dictionary_For Loop_Python 2.x - Fatal编程技术网

Python 嵌套字典中包含的向量的相关性

Python 嵌套字典中包含的向量的相关性,python,loops,dictionary,for-loop,python-2.x,Python,Loops,Dictionary,For Loop,Python 2.x,我有一个嵌套的dict,具有下一个结构: {Cell_name_1 : {KPI_name_1: [value1, value2, ..., valueN], KPI_name_2: [value1, value2, ..., valueN], ..., KPI_name_N: [value1, value2, ..., valueN]}, Cell_name_2 : {KPI_name_1

我有一个嵌套的dict,具有下一个结构:

{Cell_name_1 : {KPI_name_1: [value1, value2, ..., valueN], 
                KPI_name_2: [value1, value2, ..., valueN], 
                ..., 
                KPI_name_N: [value1, value2, ..., valueN]}, 
 Cell_name_2 : {KPI_name_1: [value1, value2, ..., valueN], ...}, 
 Cell_name_N : {....}}
我想检查不同单元格中包含的vectos之间的相关性(我已经定义了这个方法,所以它是一个辅助函数)。比如说:

vector_1 = [64.0, 66.0, 53.5, 52.1, 54.0] #[values from KPI_name_1 from Cell_name_1]
vector_2 = [84.0, 86.0, 63.5, 72.1, 24.0] #[values from KPI_name_2 from Cell_name_2]

correlation(vector_1, vector_2)
我尝试了不同的字典循环方式(普通循环、带while和conditions的经典循环等),但我没有找到获得所需内容的方法

例如,代码如下所示:

dic_sem = {'16895555': {'KPI_name_1': [64.0, 66.0, 53.5, 52.1, 54.0], 
                        'KPI_name_2': [54.0, 56.0, 23.5, 32.1, 84.0]}, 
           '16894444': {'KPI_name_1': [84.0, 86.0, 63.5, 72.1, 24.0], 
                        'KPI_name_2': [24.0, 26.0, 63.5, 92.1, 84.0]}}

'16895555'
'16894444'
是不同的
单元名称

您可以迭代字典并创建单元名称字典,例如
KPI\u name\u 1
到包含向量的列表中

from collections import defaultdict

vectors = defaultdict(list)

#Iterate over the values
for value in dic_sem.values():
    #Create your vectors dictionary
    for k, v in value.items():
        vectors[k].append(v)

print(dict(vectors))
输出将是

{'KPI_name_1': [[64.0, 66.0, 53.5, 52.1, 54.0], [84.0, 86.0, 63.5, 72.1, 24.0]], 
'KPI_name_2': [[54.0, 56.0, 23.5, 32.1, 84.0], [24.0, 26.0, 63.5, 92.1, 84.0]]}
然后,您可以迭代此字典的值,并相应地调用
correlation

for value in vectors.values():
    print(value[0], value[1])
    #correlation(*value)
这里的输出将是

[64.0, 66.0, 53.5, 52.1, 54.0] [84.0, 86.0, 63.5, 72.1, 24.0]
[54.0, 56.0, 23.5, 32.1, 84.0] [24.0, 26.0, 63.5, 92.1, 84.0]

也许
itertools.product
可以在这里提供帮助:


进口itertools
将numpy作为np导入
#获取向量名称(假设所有单元格中都存在键)
字段名称=列表(dic\u sem.values())[0]。键()
#预计算所有对单元
所有单元格对=列表(itertools.product(dic_sem.keys(),dic_sem.keys())
corr={}
对于字段名称中的字段:
corr[field]=np.对所有单元对中的c1、c2进行重塑([correlation(dic_-sem[c1][field],dic_-sem[c2][field]),(len(dic_-sem),-1))

请注意,我们在这里进行的计算是所需计算的两倍以上:相关矩阵是对称的,因此只需计算上三角形或下三角形(例如,使用
itertools.compositions
),不包括对角线(等于1)。但是上面应该给出方向。

很抱歉,我不能使用numpy或itertools库。