最好通过一个例子来展示。我正在从matplotlib图中获取“属性”字段。它是一个具有不同键和值的字典。
keys = gca().properties().keys
ax1 = gca().properties()
然后我正在绘制其他内容,我又采取了另一个实例
ax2 = gca().properties()
现在假设相同的键对ax2有效(我认为它们是,因为我没有改变绘图类型),我如何比较ax1和ax2的每个值?这些值都是不同的数据类型,简单的比较不起作用。我试过了
for key in keys:
if ax1[key]!=ax2[key]:
print(key,ax1[key])
我得到了
Traceback (most recent call last):
File "<ipython-input-46-363fb313494e>", line 2, in <module>
if ax1[key]!=ax2[key]:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
我实际上想要找到两个图之间不同的字段的名称和值。有没有办法处理如此复杂的数据结构?
答案 0 :(得分:1)
问题是numpy
数组不支持转换为bool
,
所以问题不是!=
比较,而是if
语句试图将obejct转换为bool
以查看它是True
还是{{1}这一步失败了。
诀窍是检查值是否为False
,如果是,请使用ndarray
或.all()
将比较结果转换为.any()
:< / p>
bool
使用# assuming: import numpy as np
for key in keys:
val1, val2 = ax1[key], ax2[key]
are_different = val1 != val2
if isinstance(val1, np.ndarray):
are_different = are_different.any()
if are_different:
print(key,ax1[key])
意味着如果这些数组中的单个条目不同,则认为它们不同。如果您希望所有条目都不同,请将其替换为.any()
。
答案 1 :(得分:0)
似乎知道内置deepdiff
函数需要两个对象并进入所有子方法来查找差异。建立自己的功能。