检测对numpy数组的更改

时间:2014-02-25 18:22:57

标签: python numpy

我要做的是提供一个用于显示一些numpy数组的GUI,并连接IPython,以便您可以随意操作数据。我有所有的IPython工作,问题是如何检测数组发生了变化。

显而易见的解决方案是明确调用某种refresh(),但我想要立即反馈。绘制GUI很昂贵(几秒钟)所以我不能重新绘制计时器。但是,我可以查看计时器上的数据,如果更改则重绘。

我看到了关于hashing the whole ndarray的答案,这很有帮助,但我的数组有点太大了,哈希太慢了。我并不严格需要哈希,因为我不计划缓存或存储某些特定的数组。

我可以通过numpy跟踪自己的“脏”标志吗?或者,是否有一些属性在变异数组后会有不同的id或其他东西?

1 个答案:

答案 0 :(得分:4)

您可以通过存储一些checksums并在计时器上重新计算它们来查找更改,或者只是保留副本并检查与np.all(a==b)的相等性。然而,这些方法不会很好地扩展。

一个解决方案making your array read-only,然后为用户提供一些变异方法,您可以使用这些方法调用refresh()

另一个想法是继承ndarray,通过调用refresh()包装相关方法。这个可能很棘手,因为有很多方法可以改变numpy数组。

最后,您可以提供一个自定义IPython配置文件,在每个用户命令后调用refresh()。这似乎是最简单的方法,因为您可以使用现有的hooks模块来插入您的呼叫。