joj*_*ojo 14 python numpy matplotlib python-3.x
在蟒蛇3.X keys()
,values()
并items()
返回意见.现在虽然视图肯定有优势,但它们似乎也会导致一些兼容性问题.例如matplotlib
(最终是numpy
).作为一个例子这和这对stackexchange问题的答案只是正常工作与Python 2.x的,但在Python 3.4执行他们的时候抛出一个异常.
一个最小的例子是:
import matplotlib.pyplot as plt
d = {1: 2, 2: 10}
plt.scatter(d.keys(), d.values())
Run Code Online (Sandbox Code Playgroud)
哪个TypeError: float() argument must be a string or a number, not 'dict_values'
用python 3.4 引发.
虽然对于最小的例子,Exception非常清楚,但是由于同样的问题而出现了这个问题,而且这里的Exception不太清楚:TypeError: ufunc 'isfinite' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
处理这个问题的最佳做法是什么?我们可以希望在新版本matplotlib
(或最终numpy
)这个问题将得到处理或者我们应该开始写东西喜欢list(dict.values())
使用的时候matplotlib
只是为了确保不要碰到与Python 3.x的麻烦吗?
更多的错误:
--> 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'
Run Code Online (Sandbox Code Playgroud)
所以最小的例子是:
np.array(d.keys(),dtype=float)
Run Code Online (Sandbox Code Playgroud)
没有 dtype 规范
In [16]: np.array(d.keys())
Out[16]: array(dict_keys([1, 3]), dtype=object)
Run Code Online (Sandbox Code Playgroud)
将dict_keys
被视为一个object
。通常,您必须努力避免np.array
将对象视为数字列表。
In [17]: np.fromiter(d.keys(),dtype=float)
Out[17]: array([ 1., 3.])
Run Code Online (Sandbox Code Playgroud)
np.fromiter
可以处理d.keys()
,将其视为可迭代的。因此,在如何fromiter
处理不同于np.array
.
生成器表达式的工作方式相同,例如(i for i in range(4))
. fromiter
可以遍历它,array
将其视为对象或引发错误。
如果 SO 提到的所有错误都归结为np.array(...)
处理生成器,那么可能可以通过一个numpy
更改来修复该行为。开发人员当然不想调整每个可能接受列表的函数和方法。但这感觉像是一个必须经过彻底测试的根本性变化。即便如此,它也可能会产生向后兼容性问题。
一段时间以来,公认的修复方法是将您的代码通过2to3
.
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() 的现有用法。
归档时间: |
|
查看次数: |
3087 次 |
最近记录: |