为了账号安全,请及时绑定邮箱和手机立即绑定

将字典的内容导出到amxn矩阵

将字典的内容导出到amxn矩阵

婷婷同学_ 2021-05-13 17:35:06
我有一本字典,可以改变对象的数量。每个对象的类型将始终是一个3元素的ND数组。例如:exampleDict = {u'A': array([ 1, 2, 3]), u'B': array([ 2, 3, 4]), u'C': array([ 3, 4, 5]), u'D': array([ 4, 5, 6])}使用for循环,我希望能够创建一个看起来像这样的矩阵:exampleMatrix = array([[ 1, 2, 3], [ 2, 3, 4], [ 3, 4, 5], [ 4, 5, 6]])我可以使用以下方法创建正确尺寸的0矩阵:exampleMatrix = np.zeros((len(exampleDict), 3))但是,我不知道如何适当地填充该矩阵。我正在尝试使用for循环。我愿意接受其他建议。谢谢!
查看完整描述

2 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

这里最棘手的部分是,不能保证在某些版本的Python中不能对字典进行排序(如果您使用的是Python 2.7,则肯定不会对字典进行排序),因此必须有一种方法来确定最终数组的值顺序。


由于看起来您想按键的字母顺序创建数组,因此可以使用列表推导和sorted:


np.array([v for _, v in sorted(exampleDict.items())])


array([[1, 2, 3],

       [2, 3, 4],

       [3, 4, 5],

       [4, 5, 6]])


查看完整回答
反对 回复 2021-05-25
?
慕的地10843

TA贡献1785条经验 获得超8个赞

如果您想保留键以供将来参考(与其他变量相比),并且仍将其视为numpy数组,则可以使用Pandas的数据框:

my_array=pandas.DataFrame(exampleDict)

然后,您可能需要对进行numpy操作my_array.values。由于您拥有密钥,因此熊猫在其余的代码中可能会做很多工作,从而省去了一些麻烦。我建议去看看。

如果您想保持简单,除了列表理解其他答案之外,还有一种更简单的方法。尽管我不确定您是否会面对大型阵列产生任何影响,但是使用解决方案进行速度测试的方法是:

np.array([v for _, v in (exampleDict.items())]):3.63u

np.array([v for v in exampleDict.values()]):3.53u

np.array(list(exampleDict.values())):3.40u

不用说,熊猫解决方案将比其他方法花费更多的时间,它仅保留更多信息,并且“也许”将速度提高到其他地方。


查看完整回答
反对 回复 2021-05-25
  • 2 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号