2015-01-19 3 views
4

scipy.signal.dlsim 메서드에 올바른 입력을 제공하는 데 문제가 있습니다. I는 다음과 같이 구축Numpy.dot() 차원이 맞지 않았습니다.

A = np.array([ 
    [0.9056, -0.1908, 0.0348, 0.0880], 
    [0.0973, 0.8728, 0.4091, -0.0027], 
    [0.0068, -0.1694, 0.9729, -0.6131], 
    [-0.0264, 0.0014, 0.1094, 0.6551] 
    ]) 

B = np.array([ 
    [0, -0.0003, -0.0330, -0.0042, -0.0037], 
    [0, -0.0005, 0.0513, -0.0869, -0.1812], 
    [0, 0.0003, -0.0732, 1.1768, -1.1799], 
    [0, -0.0002, -0.0008, 0.2821, -0.4797] 
    ]) 

C = np.array([-0.01394, -0.0941, 0.0564, 0.0435]) 

D = np.array([0, 0.0004, -0.0055, 0.3326, 0.5383]) 

및 입력 벡터 :

inputs = np.array([ 
    data['input1'].values(), 
    data['input2'].values(), 
    data['input3'].values(), 
    data['input4'].values(), 
    data['input5'].values() 
]) 

(5x752) 크기와 입력 행렬을 생성 (I 가지고

이 방법은 4 상태 공간 행렬이 필요 752 데이터 포인트). 그래서 나는 사전 처리에 내 데이터를 입력 행렬의 전치을 :

inputs = np.transpose(inputs) 

의 입력 행렬이 지금은 가정 (752x5) 차원이 scipy의 시뮬레이션 알고리즘 필요가 있습니다. 나는이 방법을 실행하면

, 나는 다음과 같은 오류 얻을 :

110  # Simulate the system 
    111  for i in range(0, out_samples - 1): 
--> 112   xout[i+1,:] = np.dot(a, xout[i,:]) + np.dot(b, u_dt[i,:]) 
    113   yout[i,:] = np.dot(c, xout[i,:]) + np.dot(d, u_dt[i,:]) 
    114 

ValueError: shapes (4,5) and (1,5) not aligned: 5 (dim 1) != 1 (dim 0) 

내가 scipy이 곱셈을 할 수없는 이해를하지만 난 어떤 형식으로 내가 방법을 내 입력 배열을 제공한다 모른다. 매트릭스를 조 변경하지 않으면 치수가 더 나 빠진다 (1x752).

여기에 뭔가가 있습니까?

답변

8

numpy.dot() 메서드는 행렬과 배열에 대해 별도로 작동합니다. 배열을 어딘가에 매트릭스로 변환하여이 오류의 원인이되는 치수를 쉽게 읽을 수 있습니다. 벡터가 행렬로 해석되면 Numpy는 행 벡터로 간주합니다. 그러면 치수 오류가 발생합니다 : (4x5) x (1x5).

NumPy와 배열로 벡터를보고, numpy.dot() 벡터는 열 벡터로 간주되고 np.dot() 올바르게 산출 할 수 있기 때문에 자동 오른쪽 승산을 수행 (4x5) x (5x1)

+1

"NumPy와 배열로 벡터를 볼 때. .. 왜냐하면 벡터가 열 벡터로 보여지기 때문입니다. "즉,'np.dot()'를 사용하기 전에'np.asarray (MatrixOrArray)'를 실행하는 것은 그 트릭을 수행해야합니까? 그리고'np.dot()'는 열에서만 작동하기 때문에 그렇게됩니다. – Muno

+0

해결책을 얻으려고했던 것을 보여 주실 수 있습니까? – Jam1

관련 문제