2014-02-18 84 views
1

假設我有一個矩陣。我刪除了一整行,在完成後,我想將刪除的行追加到縮小的矩陣中。我怎樣才能做到這一點?追加矩陣

import numpy as np 
A=np.array([[1,2,3],[4,5,6],[7,8,9]]) 
A1=np.delete(A,1,0) 
A2=A[1,:] 
np.append(A1,A2,0) 

但是這顯示錯誤。

有什麼建議嗎?

+0

難道我的回答解決您的問題?你遇到過其他問題嗎? – Jon

回答

0

您可以嘗試vstack改爲:按照垂直順序(行方向)順序堆疊數組。 http://docs.scipy.org/doc/numpy/reference/generated/numpy.vstack.html

In [33]: np.vstack([A1, A2]) 
Out[33]: 
array([[1, 2, 3], 
     [7, 8, 9], 
     [4, 5, 6]]) 
+0

對於0和1都是失敗的。由於它最初是一個3x3矩陣,並且在刪除一行之後,我將它縮減爲2x3矩陣。現在我想追加刪除的行,以便它再次變成3x3。 – user2804160

1

當你做np.delete它返回數組沒有刪除的行,而不是刪除的行。所以你的A1實際上有兩行而不是一行,這就是它失敗的原因。

達到你想要什麼,這應該這樣做:

A1 = A[1] 
A = np.delete(A, 1, 0) 
result = np.append(A, A1[np.newaxis, :], 0) 

result將包含:

array([[1, 2, 3], 
     [7, 8, 9], 
     [4, 5, 6]]) 

了這你想要什麼?

請注意,使用np.newaxis是必要的,使與行數組相同形狀的單行數組A1能夠追加(因爲np.append要求數組具有相同的維數)。

1

如何:

def move_row_to_end(A, row): 
    return A[range(row) + range(row + 1, A.shape[0]) + [row]] 

A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) 
print move_row_to_end(A, 1)