2016-10-22 91 views
-1

我想在我的for循環中有一個列向量。它會作爲一個列,但出去行和引起的循環問題,因爲我得到的錯誤行中的for循環

ValueError: could not broadcast input array from shape (2,2) into shape (2,)

請幫助。在這裏如何去:

我有一個Xtrue值,其中輸出

Out[77]: 
array([[ 44.3161691], 
    [-10.5871559]]) 

,然後我進入循環:

xk_1 = Xtrue #initialization before loop 
n=103.789 #calculated under some other concept 
t=int(float(np.floor(n)))-1 #number of iterations 
for k in range(0,t,1): 
     xk_1[:,k] = A.dot(xk_1[:,k-1]) + B.dot(U) #B.dot(U) is a standard value 

B.dot(U)輸出(2,1)

array([[-4.903325], 
    [-9.80665 ]]) 

A=array([[1, 1], 
    [0, 1]]) 

這裏有什麼來自A.dot(xk_1[:,k-1])形狀(2,)

array([ 35.15803805, -9.87264348]) 

它應該具有的形狀(2,1)

這裏很重要的一點是,我需要的乘法的第k個值時,它是(2,k),因爲這是系統如何整部作品。

回答

0

xk_1[:,k-1]將形狀(2,)所以這就是爲什麼A.dot(xk_1[:,k-1])也是(2,)。然後將(2,)添加到(2,1)將導致(2,2),因此錯誤。

您可以隨時更改的行向量(k,)列向量(k,1)有:

my_array.shape = -1,1 # inplace 

my_array.reshape((-1,1)) # returns a new array 

(該-1代表尺寸大小的自動檢測,在你的情況下,相當於2。)

+0

你好 非常感謝您的回覆。我忘了提及我正在努力學習python,而且我只有一個月大。我很抱歉,但我不明白如何應用您寫給我的代碼的內容。然而,我決定轉置B.dot(U)(比如xk_1 [:,k] = A.dot(xk_1 [:,k-1])+(B.dot(U))。最後的行和列。但現在我收到另一個錯誤,說'IndexError:索引1超出了大小爲1的軸1的邊界',現在我無法弄清楚爲什麼會出現這種情況。如果你能再次回覆我,我真的很高興。非常感謝您 – Buket

+0

您好,我只是想通知您我修正了以下代碼:xk_1 = Xtrue.T t = int(float(np.floor(n))) 對於範圍(1,t,Dt ): xk_1 [k ,:] = A.dot(xk_1 [k-1 ,:]] +(B.dot(U))。其中Xtrue.T將所有內容轉換爲行矩陣。我從1開始循環(因爲k-1)並且將索引從[:,k]改爲[k ,:](因爲它現在是一個行矩陣),但是現在收到錯誤,說'IndexError:index 1已經超出範圍爲1的軸0'我不明白它在說什麼軸,爲什麼我的索引是錯誤的。它看起來對我來說是正確的,但希望有一個簡單的答案。再次感謝你。 – Buket

+0

那麼這不是一個教程網站。已經有大量的信息僅用於學習。我建議你開始閱讀文檔... – Julien