Python 如何将numpy数组分解为列表并创建字典?
我有以下列表和一个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
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))