НП.linspace vs range в Боке

Я новичок в программировании и пытаюсь работать с боке. Новичок в StackOverflow тоже, поэтому, пожалуйста, скажите мне, если я сделал что-то не так здесь.

Я играю с этим примером с веб-сайта Bokeh, и я столкнулся с проблемой. Когда значения x заданы, как в примере, используя np.linspace, я могу использовать interact и играть с функцией обновления. Но, если я изменю x на список, используя range (), то я получу эту ошибку: TypeError: может только объединять список (не «float») в список. Как я понимаю, проблема заключается в «x + phi», так как x-это список, а phi-это поплавок.

Я понимаю, что невозможно объединить список с плавающей точкой, но почему это только тогда, когда я использую numpy.Ndarray, что Python понимает, что я хочу изменить функцию, которая управляет значениями y?

Вот код (я использую Jupyter Notebook):

x = np.linspace(0,10,1000)
y = np.sin(x)
p = figure(title="example", plot_height=300, plot_width=600, y_range=(-5,5))
r = p.line(x, y)

def update(f, w=1, A=1, phi=0):
    if   f == "sin": func = np.sin
    elif f == "cos": func = np.cos
    elif f == "tan": func = np.tan
    r.data_source.data["y"] = A * func(w * x + phi)
    push_notebook()

show(p, notebook_handle=True)
interact(update, f=["sin", "cos", "tan"], w=(0,100), A=(1,5), phi=(0,20, 0.1))

1 ответ

  1. Да, пожалуйста, сравните вашу документацию numpy с документацией списков: https://docs.python.org/3.6/tutorial/datastructures.html

    Вы также можете играть со следующим кодом:

    from numpy import linspace
    
    a = linspace(2, 3, num=5)
    b = range(5)
    
    print(type(a), a)
    print(type(b), b)
    print()
    print("array + array:", a + a)
    print("list + list:", b + b)
    print(a + 3.14159)
    print(b + 2.718) # will fail as in your example, because it is a list
    

    Мой совет-не смешивать списки и массивы, если нет других причин для этого. Я лично часто приводил аргументы функции к массивам при необходимости:

    def f(an_array):
        an_array = numpy.array(an_array)
        # continue knowing that it is an array now,
        # being aware that I make a copy of an_array at this point