2014-02-25 99 views
0

我試圖做的是用於顯示一些numpy陣列提供了一個圖形用戶界面,及導線上的IPython這樣你就可以,只要你喜歡操縱數據。我有所有的IPython的東西工作,問題是如何檢測數組改變。檢測到改變爲numpy的陣列

顯而易見的解決方案是顯式調用某種refresh(),但我想即時反饋。繪製GUI是昂貴的(幾秒鐘),所以我不能在一個定時器上重繪。但是,我可以看起來在計時器上的數據,並重新繪製,如果它改變。

我看到一個答案約hashing the whole ndarray這是有幫助的,但我的陣列是有點過大,哈希太慢。我並不嚴格需要散列,因爲我不打算緩存或存儲某個特定的數組。

我能得到numpy的跟蹤自己的「髒」標誌?或者,是否有一些屬性在變異數組後會有不同的id或其他內容?

+0

你能不能告訴陣列是否僅通過檢測,將改變它的用戶活動改變了嗎? – user2357112

+0

這將有所幫助,但對於不通過IPython小部件的編程代碼,我仍然需要圍繞顯式的'render()'調用。如果我們能夠回答這個問題,它會使交互和編程接口相同,並希望更簡單。 – Cuadue

+0

您的代碼是否以這種方式工作,以顯示數組的中間狀態將會有用?漸進式渲染對網頁來說很好,但對於您的情況,您可能無法在結果的第一位進入時與整個輸出準備就緒之間更新顯示。通話結束後,您可以更新顯示屏。或者是一些其他線程同時修改陣列,而不是由用戶輸入定向? – user2357112

回答

2

你可能會忘記存儲一些checksums並重新計算它們在計時器上以查找更改,或者只是保留副本並檢查與np.all(a==b)的等同性。雖然這些方法不能很好地擴展。

一個解決方案making your array read-only,然後給用戶一些突變方法,您可以調用refresh()

另一個想法是子類ndarray,包裝相關的方法調用refresh()。這可能會非常棘手,因爲有很多方法可以對numpy數組進行變異。

最後,你可以提供一個自定義的IPython配置文件,每個用戶命令之後調用refresh()。這似乎是最簡單的方法,因爲您可以使用現有的hooks模塊插入呼叫。

+0

我喜歡'hooks'方法。我可以在* IPython輸入之前得到一些執行*的代碼,但在*之後我找不到執行*的方法。任何想法? – Cuadue

+0

啊,看起來他們改變了v1.0的API。我對IPython內部知識不夠了解。也許你應該問一個單獨的問題,以引起一些IPython專家的注意。 – perimosocordiae