2013-05-05 3 views
2

나는 파이썬에서 노래를 재구성하려고하는데, 같은 노트를 연결할 수 없다. 는이 오류를 얻을 : @filmor 노트, xy 다른 형태의, 그리고 그 이유는 pausa = nota(0,0)의 당신의 정의 그대로ValueError with Python and Numpy

import numpy as np, matplotlib.pyplot as plt 

def nota(f,d): 
    ts = 0.0002 
    t = np.arange(0, d, ts) 
    X = 5500*np.cos(2*np.pi*f*t) 
    return X 

# II.2.b) 
pausa = nota(0,0) 
La  = nota(440,0.25) 
Mi  = nota(659.26,0.25) 
Do  = nota(253.25,0.25) 
Sol  = nota(783.99,0.25) 
Si  = nota(493.88,0.25) 
Solbemol = nota(830.61,0.25) 

def FurElise(): 
    musica = np.array((pausa,pausa,La,Mi,La,pausa,pausa,Mi,Mi,Solbemol, \ 
         pausa,pausa,La,Mi,La,pausa,pausa,pausa,La,Mi,La, \ 
         pausa,pausa,Mi,Mi,Solbemol,pausa,pausa,La,Mi,La, \ 
         pausa,Do,Sol,Do,pausa,pausa,Sol,Sol,Si,pausa,pausa, \ 
         La,Mi,La,pausa,pausa,Mi,Mi,Mi,pausa)) 
    y=0 
    for x in musica: 
     z=np.hstack((x,y)) 
     y = y+x 
    z=np.hstack((x,y)) 
    plt.plot(z) 
    plt.show() 

FurElise() 
+2

어떻게 될 것으로 예상됩니까? 'x'는 배열이고'y'는 실수라고 생각하지 않으면 숫자입니다 ... – filmor

+0

두 개의 작은 점 : [code in English] (http://www.codinghorror.com/blog/)에 노력해야합니다. 2009/03/the-ugly-american-programmer.html) (스페인어 변수 이름 제외) (http://www.codespanish.com/lang_enwhy-you-shouldn%E2%80%99t-code-in-spanishlang_enlang_esporque- no-debe-escribir-codigo-en-espanollang_es /)), 변수 이름 지정 지침은 [PEP 8] (http://www.python.org/dev/peps/pep-0008/)을 참조하십시오. 예를 들어 CamelCase에서 변수와 함수 정의를 보는 것은 혼란 스럽습니다. –

+0

내 변수는 스페인어가 아닌 포르투갈어로되어 있습니다 :) – user2352414

답변

3

:

ValueError: operands could not be broadcast together with shapes (0) (1250)

여기 내 코드입니다. 값을 사용하여 0의 결과 배열의 길이는 0이고 다른 모든 배열의 길이는 1250이고 y = y+x은 결국 현재 오류 (예 : musica의 3 번 반복 이후)를 표시합니다. '당신은 musica (당신이 가정 만들

pausa = nota(0,0.25) 
+0

나는 이미 그것을 바꿔 놓았고 나에게 똑같은 오류를주고있다. – user2352414

+0

이상하게도, 예제 스크립트에서 그 코드 행을 바꾸는 것만으로도 문제가 해결되기 때문이다. 다른 코드 줄에서 오류가 표시되지 않습니까? 예제 스크립트를 직접 수정하고 다시보고하십시오. – fgb

1

:

당신은 오류를 제거하도록 pausa를 다시 정의, 당신은 일시 정지가 모든 다른 음과 같은 길이이어야 할 수있는 가정 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@로 그래서 musica.shape(51, 1250)

입니다. z은 모든 메모가 각각의 행에있는 것이 아니라 하나의 행에있는 긴 1D 배열이 필요하다고 생각합니다. 두 가지 해결책이 있습니다.

musica = np.hstack((pausa,pausa,La,Mi,La,...)) 
plt.plot(musica) 

이 :

가 더 나은 솔루션입니다
y=0 
for x in musica: 
    z=np.hstack((x,y)) 
    y = y+x 
z=np.hstack((x,y)) 

musica 당신이 그것을 만들 1D 배열을 만들 :

musica = np.array((pausa,pausa,La,Mi,La,...)) 
z = musica.flatten() 
plt.plot(z) 

을 완전히이 모두 제거 : 하나는 말을하는 것입니다 모든 음 (pausa, La 등)을 가져 와서 쌓습니다. h orizontally (모두 한 행에 함께 표시되도록 함)이므로 아무 것도 병합하거나 연결할 필요가 없습니다.

+0

+1 두 번째 접근법 (직접'np.hstack() all notes)은 특정 길이의 'pausa'가 필요없고 코드를 크게 단순화합니다. – fgb

+0

@fgb 구문 적으로'pausa'는 유한 길이를 요구하지 않지만 프로그램을 받으면'pausa'는 여전히 유한 기간을 가져야한다고 생각합니다. 그렇지 않으면 그곳에도 존재하지 않을 것입니다. – askewchan

+1

길이가 충분해야한다는 데 동의하지만, 다른 모든 노트와 길이가 동일하게되도록하는 것이 좋습니다. – fgb