我有一本字典需要转换成NumPy结构的数组。我使用的是arcpy函数^{
基于此线程:Writing to numpy array from dictionary和此线程:How to convert Python dictionary object to numpy array
我试过这个:
result = {0: 1.1181753789488595, 1: 0.5566080288678394, 2: 0.4718269778030734, 3: 0.48716683119447185, 4: 1.0, 5: 0.1395076201641266, 6: 0.20941558441558442}
names = ['id','data']
formats = ['f8','f8']
dtype = dict(names = names, formats=formats)
array=numpy.array([[key,val] for (key,val) in result.iteritems()],dtype)
但我总是得到expected a readable buffer object
下面的方法可以工作,但很愚蠢,显然不能用于实际数据。我知道有一个更优雅的方法,我只是想不通。
totable = numpy.array([[key,val] for (key,val) in result.iteritems()])
array=numpy.array([(totable[0,0],totable[0,1]),(totable[1,0],totable[1,1])],dtype)
您可以使用
np.array(list(result.items()), dtype=dtype)
:收益率
如果不想创建元组的中间列表
list(result.items())
,则可以使用np.fromiter
:在Python2中:
在Python3中:
为什么使用列表{}不起作用:
顺便说一下,你的尝试
离工作很近。如果将列表
[key, val]
更改为元组(key, val)
,那么它就可以工作了。当然了是同一件事
在Python2中,或者
在Python3。
np.array
对待列表的方式不同于元组:Robert Kern explains:因为
(0.0, 1.1181753789488595)
被认为是这些原子元素之一,所以它应该是元组,而不是列表。当单词的值是相同长度的列表时,让我提出一种改进的方法:
更简单的是,如果你接受使用熊猫:
给出:
相关问题 更多 >
编程相关推荐