2

Ich verwende ein Widget, um die Generierung einiger Daten zu parametrisieren. Ich möchte die Daten erfassen, ohne sie auszugeben. Ist das möglich? Das Hinzufügen von ; nach interact() funktioniert nicht. Beispiel:Unterdrücken Ausgabe von einem Interact() Widget

import ipywidgets as widgets 
from ipywidgets import interact, interactive, fixed 

def generate_data(n, p, s): 
    return np.random.negative_binomial(n, p, s) 

w_n = widgets.IntSlider(min=1, max=10000, step=1) 
w_p = widgets.FloatSlider(min=0.01, max=1, step = 0.01) 
w_s = widgets.IntSlider(min=500,max=10000,step=50) 

data = interact(generate_data, n = w_n, p = w_p, s = w_s); 

Antwort

2

Statt einen Wert in generate_data() zurückzukehren, können Sie eine globale Variable ändern. Es vermeidet das Drucken der Ausgabe, und Sie können val später in Ihrem Code verwenden.

import ipywidgets as widgets 
from ipywidgets import interact, interactive, fixed 
import numpy as np 

val = None 
def generate_data(n, p, s): 
    global val 
    val = np.random.negative_binomial(n, p, s) 

w_n = widgets.IntSlider(min=1, max=10000, step=1) 
w_p = widgets.FloatSlider(min=0.01, max=1, step = 0.01) 
w_s = widgets.IntSlider(min=500,max=10000,step=50) 

interact(generate_data, n = w_n, p = w_p, s = w_s) 
2

Ich habe eine Pull-Anforderung an ipywidgets vorgelegt, die dieses Problem behebt:

https://github.com/ipython/ipywidgets/pull/712

Die Änderungen sind eigentlich sehr einfach. Mit dieser Version würden Sie einfach einen zusätzlichen Kwarg an interact übergeben:

data = interact(generate_data, n = w_n, p = w_p, s = w_s, 
       __output_result=False)