2016-10-31 6 views
0

저는 코딩이 새로워서 Bokeh와 협력하려고합니다. Newcomer to StackOverflow 너무, 그래서 내가 여기 뭔가 잘못했는지 말해주십시오.np.linspace vs Bokeh 범위

나는 Bokeh 웹 사이트에서 this example을 가지고 노는 중이며 문제가 발생했습니다. 이 예제에서와 같이 np.linspace를 사용하여 x 값을 설정하면 상호 작용을 사용하고 업데이트 기능으로 재생할 수 있습니다. 그러나 x를 목록으로 변경하고 range()를 사용하면이 오류가 발생합니다. TypeError : 목록에만 연결할 수 있습니다 ("float"이 아님). 내가 이해하는 한, 문제는 "x + phi"에있다. 왜냐하면 x는리스트이고 φ는 플로트이기 때문이다.

목록을 플로트로 연결할 수 없지만, numpy.ndarray를 사용하여 파이썬이 y 값을 제어하는 ​​함수를 수정한다는 것을 이해할 때만 그 이유는 무엇입니까? https://docs.python.org/3.6/tutorial/datastructures.html

또한 다음 코드를 사용하여 재생할 수 있습니다 :

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

리스트와 ndarrays는 완전히 다른 의미를 '+'연산자에 할당합니다. 그것들은 매우 다른 유형이며, 당신이 다른 것과 똑같이 행동한다고 ​​가정해서는 안됩니다. – user2357112

+0

아마도'range ='와 비슷한 매개 변수를 가지고 있지만'numpy' 배열을 생성하는'x = np.arange (0,10, .01)'을 사용할 수 있습니다. – hpaulj

+0

'+'연산자는 numpy 배열에 대한 추가 작업을 수행하지만리스트에 대한 연결 작업은 수행하지 않습니다. '[1] + [1] == [1, 1]'np.array ([1]) + np.array ([1]) == np.array ([2] @hpaulj가 말했듯이,'range' 대신에'np.arange'를 사용하여 목록보다는 numpy 배열 출력을 얻습니다. –

답변

0

예, 목록의 문서와 NumPy와 문서를 비교하십시오 : 여기

(나는 Jupyter 노트북을 사용하고 있습니다) 코드입니다 :

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