2013-09-03 5 views
2

다음과 같은 문제가 있습니다. 나는 그런 방법으로 pyplot에서 사용할 수있는 방법으로 다음과 같은 기능python matplotlib.pyplot 및 numpy 문제

def sigLinZ(self,val,omega): 
    A = 1 
    C = 0 
    D = 1 

    B =1./(omega*val*1j) 

    return np.asmatrix(np.array([[A,B],[C,D]])) 

을 평가할 :

omega = numpy.arange(0,100,1) 
y = classInstance.sigLinZ(12,omega) 
plt.plot(omega,y) 

하지만이 작동하지 않습니다. 파이썬은 말합니다 :

Traceback (most recent call last): 


File "testImpedanz.py", line 132, in test6_lineImpedanz 
    print "neue Matrix: ", lineImpe.sigLinZ('C',lineImpe.C(),np.array([600e6,300e6])) 
    File "/afs/physnet.uni-hamburg.de/users/ap_h/pgwozdz/Dokumente/PythonSkriptsPHD/ImpedanzCalculation.py", line 350, in sigLinZ 
    return np.mat(np.array([[A,B],[C,D]])) 
TypeError: only length-1 arrays can be converted to Python scalars 

나는 numpy 함수에 대해 잘 알고 있지만이 함수는 잘 작동하지만 내 함수에서는 전혀 작동하지 않습니다.

답변

3

메서드에 전달할 배열 omega의 정의에서 행렬 요소에 배열을 삽입하려고합니다. omega을 반복하여 각 요소를 sigLinZ에 전달해야하거나 sigLinZ을 다시 작성하여 배열을 처리하고 행렬 또는 3D 배열 목록을 반환해야합니다.

1

먼저 문제는 냅스터와 관련이없고 numpy와 관련이 있습니다.

return np.asmatrix(np.array([[A,B],[C,D]])) 

을 그리고 실제로

np.array([[A,B],[C,D]]) 

는 오류 메시지와 객체의 모양에서 확인할 수 있습니다 작동하지 않는 이유는 여기에 실패 그것은 라인에 실패합니다. 당신이

print omega 
>>> (100,) 

의 모양 omega을 통과하고 크기 2x2의 객체에 넣어하려고하면, [[A,B],[C,D]]는 참으로 약

TypeError: only length-1 arrays can be converted to Python scalars 

당신은에서 스칼라 값을 반환하려는나요 불평 할 것이다 함수 sigLinZ? 나는 당신이 그 결과로 간단한 plt.plot 명령을하려고하기 때문에 그것을 추측하고있다.

편집 : 당신이 정말로 행렬의 행렬을 원하는 경우, 당신은 마지막 인덱스가 배열을 설정 즉 (2,2,100)의 모양을 제공 B

def sigLinZ(val,omega): 
    B = 1./(omega*val*1j) 
    A = 1*np.ones(B.shape) 
    C = 0*np.ones(B.shape) 
    D = 1*np.ones(B.shape) 
    return np.array([[A,B],[C,D]]) 

로 다른 항목을 같은 크기로 만들 필요가 2x2 행렬의 뭉치의 수. Sidenote, 그대로, B은 0으로 나눕니다.

+0

문제는 여기에 매트릭스가 필요하다는 것입니다. sigLinZ를 몇 번 호출 한 후 몇 가지 데이터 요소를 맞추기 위해 사용되는 행렬 항목에서 함수를 파생합니다. 그러나 이것은 scipy.optimize.curve_fit에서 예상되는대로이 함수를 분명히 호출 할 수 없기 때문에이 시점에서 중단됩니다. 간단하기 때문에 코드에서이 지점을 막 알았습니다. –

+0

@PaulGwozdz 편집본이 원하는 것을 제공한다고 생각합니다. 여전히 문제가 생겨서 Stack Overflow에 오신 것을 환영합니다! – Hooked

+0

Ok 그러면 2x2 행렬이 반환됩니다. 요소는 배열입니다. 내가 원하는 것은 모든 오메가에 대해 목록으로 전달하는 것입니다. 모든 항목이 복소수 인 2x2 행렬을 원합니다. 동작은 x = np.range (0,10,1) 및 y = np.sin (x)와 같아야합니다. 여기서 y는 sin 함수의 값을 포함하는 목록입니다.나는 목록으로 전달하고자하는 오메가에 의존하는 2X2 matrizes의 목록을 원합니다. –