该错误的更多信息:
--> 512 return array(a, dtype, copy=False, order=order, subok=True)
513
514 def ascontiguousarray(a, dtype=None):
TypeError: float() argument must be a string or a number, not 'dict_values'
因此,最小的示例是:
np.array(d.keys(),dtype=float)
没有dtype规范
In [16]: np.array(d.keys())
Out[16]: array(dict_keys([1, 3]), dtype=object)
将dict_keys
视为object
。通常,您必须避免np.array
将对象视为数字列表。
In [17]: np.fromiter(d.keys(),dtype=float)
Out[17]: array([ 1., 3.])
np.fromiter
可以处理d.keys()
,并将其视为可迭代的。因此,关于如何fromiter
处理不同于的可迭代对象,有一些细节np.array
。
生成器表达式的工作方式相同,例如(i for i in range(4))
。 fromiter
可以遍历它,array
将其视为对象或引发错误。
如果SO提到的所有错误归结为np.array(...)
处理生成器,则可能只需进行一次numpy
更改即可解决此问题。开发人员当然不希望调整可能接受列表的每个函数和方法。但这感觉上是根本性的变化,必须进行彻底的测试。即使那样,它仍然可能产生向后兼容性问题。
https://docs.python.org/2/library/2to3.html
对于字典:
修复字典迭代方法。dict.iteritems()转换为dict.items(),dict.iterkeys()转换为dict.keys(),dict.itervalues()转换为dict.values()。同样,dict.viewitems(),dict.viewkeys()和dict.viewvalues()分别转换为dict.items(),dict.keys()和dict.values()。它还在对列表的调用中包装了dict.items(),dict.keys()和dict.values()的现有用法。