Python 如何将numpy数组分解为列表并创建字典?

Python 如何将numpy数组分解为列表并创建字典?,python,numpy,Python,Numpy,我有以下列表和一个numpy数组: 名单如下: features = np.array(X_train.columns).tolist() results : ['Attr1', 'Attr2', 'Attr3', 'Attr4', 'Attr5', 'Attr6', 'Attr7', 'Attr8', 'Attr9', 'Attr10', 'Attr11', 'Attr12', 'Attr13', 'Attr14', 'Attr15', 'Attr16', 'Attr17', 'Attr

我有以下列表和一个numpy数组: 名单如下:

features = np.array(X_train.columns).tolist() 

results :

['Attr1', 'Attr2', 'Attr3', 'Attr4', 'Attr5', 'Attr6', 'Attr7', 'Attr8', 'Attr9', 'Attr10', 'Attr11', 'Attr12', 'Attr13', 'Attr14', 'Attr15', 'Attr16', 'Attr17', 'Attr18', 'Attr19', 'Attr20', 'Attr21', 'Attr22', 'Attr23', 'Attr24', 'Attr25', 'Attr26', 'Attr27', 'Attr28', 'Attr29', 'Attr30', 'Attr31', 'Attr32', 'Attr33', 'Attr34', 'Attr35', 'Attr36', 'Attr37', 'Attr38', 'Attr39', 'Attr40', 'Attr41', 'Attr42', 'Attr43', 'Attr44', 'Attr45', 'Attr46', 'Attr47', 'Attr48', 'Attr49', 'Attr50', 'Attr51', 'Attr52', 'Attr53', 'Attr54', 'Attr55', 'Attr56', 'Attr57', 'Attr58', 'Attr59', 'Attr60', 'Attr61', 'Attr62', 'Attr63', 'Attr64']
和数组名ab

aa=(lr.coef_) #I put a regression result on numpy array so I can split them, I want to put them as a list
ab=np.split(aa,len(aa))

results :

[array([[ 0.04181571,  0.62369216, -0.23559375,  0.78663624, -0.13935947,
        -0.1118698 , -0.05672835, -1.73851643, -0.42134655,  0.79001534,
         0.05048936, -0.09287526,  0.10103251, -0.0587092 , -0.05300849,
         0.72827807,  1.15870475, -0.13861187, -0.42572654,  0.19369654,
        -0.33319238, -0.06805035,  0.14067888, -0.07418516, -0.04400882,
        -0.78701564, -0.10921816, -0.26166642,  0.06800944,  0.07672145,
         0.22109349, -0.15389544,  2.41697614,  0.21749429, -0.0766771 ,
         0.77580103,  0.04128744, -0.92835969, -0.41802274,  0.89865658,
        -0.12102089, -0.28887104,  0.10421332,  0.14445757,  0.02719274,
        -1.73622976, -0.34980593,  0.35199196,  0.56110135,  0.4460968 ,
        -1.13265322,  0.26188587,  0.14336352,  0.2341355 , -0.10077637,
         0.43080231, -0.05521557, -0.1996818 ,  0.00513076, -0.14477274,
         0.04712721,  0.15380395, -2.51974007, -0.03988658]])]
现在,我想为它们制作一个字典,但在这里我不知道如何将数组转换为列表

这就是我所做的:

for x in features :
    for y in ab:
        print({x:y})

and the result is not as desired, since it's failed to break down the array :

{'Attr1': array([[ 0.04181571,  0.62369216, -0.23559375,  0.78663624, -0.13935947,
        -0.1118698 , -0.05672835, -1.73851643, -0.42134655,  0.79001534,
         0.05048936, -0.09287526,  0.10103251, -0.0587092 , -0.05300849,
         0.72827807,  1.15870475, -0.13861187, -0.42572654,  0.19369654,
        -0.33319238, -0.06805035,  0.14067888, -0.07418516, -0.04400882,
        -0.78701564, -0.10921816, -0.26166642,  0.06800944,  0.07672145,
         0.22109349, -0.15389544,  2.41697614,  0.21749429, -0.0766771 ,
         0.77580103,  0.04128744, -0.92835969, -0.41802274,  0.89865658,
        -0.12102089, -0.28887104,  0.10421332,  0.14445757,  0.02719274,
        -1.73622976, -0.34980593,  0.35199196,  0.56110135,  0.4460968 ,
        -1.13265322,  0.26188587,  0.14336352,  0.2341355 , -0.10077637,
         0.43080231, -0.05521557, -0.1996818 ,  0.00513076, -0.14477274,
         0.04712721,  0.15380395, -2.51974007, -0.03988658]])}
{'Attr2': array([[ 0.04181571,  0.62369216, -0.23559375,  0.78663624, -0.13935947,
        -0.1118698 , -0.05672835, -1.73851643, -0.42134655,  0.79001534,
         0.05048936, -0.09287526,  0.10103251, -0.0587092 , -0.05300849,
         0.72827807,  1.15870475, -0.13861187, -0.42572654,  0.19369654,
        -0.33319238, -0.06805035,  0.14067888, -0.07418516, -0.04400882,
        -0.78701564, -0.10921816, -0.26166642,  0.06800944,  0.07672145,
         0.22109349, -0.15389544,  2.41697614,  0.21749429, -0.0766771 ,
         0.77580103,  0.04128744, -0.92835969, -0.41802274,  0.89865658,
        -0.12102089, -0.28887104,  0.10421332,  0.14445757,  0.02719274,
        -1.73622976, -0.34980593,  0.35199196,  0.56110135,  0.4460968 ,
        -1.13265322,  0.26188587,  0.14336352,  0.2341355 , -0.10077637,
         0.43080231, -0.05521557, -0.1996818 ,  0.00513076, -0.14477274,
         0.04712721,  0.15380395, -2.51974007, -0.03988658]])}
{'Attr3': array([[ 0.04181571,  0.62369216, -0.23559375,  0.78663624, -0.13935947,
        -0.1118698 , -0.05672835, -1.73851643, -0.42134655,  0.79001534,
         0.05048936, -0.09287526,  0.10103251, -0.0587092 , -0.05300849,
         0.72827807,  1.15870475, -0.13861187, -0.42572654,  0.19369654,
        -0.33319238, -0.06805035,  0.14067888, -0.07418516, -0.04400882,
        -0.78701564, -0.10921816, -0.26166642,  0.06800944,  0.07672145,
         0.22109349, -0.15389544,  2.41697614,  0.21749429, -0.0766771 ,
         0.77580103,  0.04128744, -0.92835969, -0.41802274,  0.89865658,
        -0.12102089, -0.28887104,  0.10421332,  0.14445757,  0.02719274,
        -1.73622976, -0.34980593,  0.35199196,  0.56110135,  0.4460968 ,
        -1.13265322,  0.26188587,  0.14336352,  0.2341355 , -0.10077637,
         0.43080231, -0.05521557, -0.1996818 ,  0.00513076, -0.14477274,
         0.04712721,  0.15380395, -2.51974007, -0.03988658]])}.......
你能帮我建立一个
ab
array的列表吗? 我该如何把它们变成字典呢

Th expected results : {[Attr1 : 0.04181571],  Attr2 : 0.623692160, and so on...}

多谢各位

从两个列表制作词典的两种方法:

In [277]: {k:v for k,v in zip(['a','b','c'],[1,2,3])}                                                                
Out[277]: {'a': 1, 'b': 2, 'c': 3}

In [278]: dict(zip(['a','b','c'], [1,2,3]))                                                                          
Out[278]: {'a': 1, 'b': 2, 'c': 3}

您可以使用内置功能:

你可以查一下这些文件

返回一个连续的展开数组

返回一个包含输入元素的一维数组


由于您的
ab
变量是通过
ab
获得的,因此它是一个包含一个numpy数组的列表,如您所示

而不是

for x in features :
    for y in ab:
        print({x:y})
使用

或者——更简单一些:

result = dict(zip(features, ab))

解释如下:


zip(features,ab)
创建成对生成器
('Attr1',0.04181571)
('Attr2',0.623692160)
,等等,然后我们从它们创建目录。

这是否回答了您的问题
ab
并不像你想象的那样只是一个列表或数组。它是一个包含数组的1元素列表,数组是二维的。您只需要将
ab
设为列表的第一个元素,或者不必麻烦拆分?您创建的
ab
很混乱。这就是我得到的结果:{'Attr1':数组([[0.04181571、0.62369216、-0.23559375、0.78663624、-0.13935947、-0.1118698、-0.05672835、-1.73851643、-0.42134655、0.79001534、0.05048936、-0.09287526、0.10103251、-0.0587092、-0.05300849、0.72827807、1.15870475、-0.1386187、-0.42572654、0.69654,你知道应该再拆分哪一部分吗?因为这部分又该拆分
ab
的元素集中为一个,不能拆分对不起,但结果与上面的实例类似,可能还有其他解决方案吗?在我的解决方案中使用
ab[0]
而不仅仅是
ab
。或者-甚至可能是
ab[0][0]
这是我得到的结果:{Attr1':数组([[0.04181571,0.62369216,-0.23559375,0.78663624,-0.13935947,-0.1118698,-0.05672835,-1.73851643,-0.42134655,0.79001534,0.05048936,-0.09287526,0.10103251,-0.0587092,-0.05300849,0.72827807,1.15870475,-0.1386187,0.42572654,0.69654,你知道问题的哪一部分集中在ab中吗?因为这些元素集中在ab中无法拆分仅使用
aa
而不是
ab
(实际上省略了您的命令
ab=np.split(aa,len(aa))
)来尝试我的解决方案。您是否使用
ab[0][0]来尝试我的解决方案
而不是
ab
?很抱歉,结果与上面的实例类似,可能还有其他解决方案吗?为什么?它不起作用,或者?您可以共享一个错误吗?这是我得到的结果:{'Attr1':数组([[0.04181571,0.62369216,-0.23559375,0.78663624,-0.13935947,-0.1118698,-0.05672835,-1.73851643,-0.42134655,0.79001534,0.05048936,-0.09287526,0.10103251,-0.0587092,-0.05300849,0.72827807,1.15870475,-0.1386187,0.42572654,0.69654,你知道问题的哪一部分集中在ab中吗?因为这些元素集中在ab中不可能split@dhika91现在检查我的答案:)现在它工作了!非常感谢!我应该意识到,
ab
很抱歉,但结果与上面的实例类似,可能还有其他解决方案吗?您的循环创建了一个字典列表,每个字典一个键,数组与值相同。我们已经向您展示了如何使用多个键创建一个字典。如果您想继续每个键的数字,你需要展平
ab
列表。我不认为
拆分
对你有任何帮助。还要检查数组的形状。看起来它将是(1,64),如果你想要一个“扁平”的,形状(64,)。
result = {}
for x, y in zip(features, ab) :
    result[x] = y
result = dict(zip(features, ab))