2016-11-30 106 views
0

我想將矩陣A(4,4)提取到矩陣b(7,4)中。Python - 將矩陣a提取到矩陣b

下面矩陣:

>>> Matrix_A = numpy.array([[[10,1.5,-3.8,8.0],[20,10.2,5.2,6.7],[30,0.5,-6.2,-7.1],[40,-0.7,-0.6,-0.5]]]) 
>>> Matrix_A 
array([[[ 10. , 1.5, -3.8, 8. ], 
     [ 20. , 10.2, 5.2, 6.7], 
     [ 30. , 0.5, -6.2, -7.1], 
     [ 40. , -0.7, -0.6, -0.5]]]) 

>>> Matrix_B = numpy.array([[[10,2.7,4.8,-5.8],[15,-1.4,-6.4,8.1],[20,12.4,-7.1,4.9],[25,-1.5,6.2,-4.8],[30,-6.8,0.47,3.8],[35,5.4,-4.8,10.5],[40,16.2,5.7,-8.3]]]) 
>>> Matrix_B 
array([[[ 10. , 2.7 , 4.8 , -5.8 ], 
     [ 15. , -1.4 , -6.4 , 8.1 ], 
     [ 20. , 12.4 , -7.1 , 4.9 ], 
     [ 25. , -1.5 , 6.2 , -4.8 ], 
     [ 30. , -6.8 , 0.47, 3.8 ], 
     [ 35. , 5.4 , -4.8 , 10.5 ], 
     [ 40. , 16.2 , 5.7 , -8.3 ]]]) 

我想結果是:

>>> Matrix_A_extract_from_Matrix_B 
array([[[ 10. , 2.7 , 4.8 , -5.8 ], 
     [ 20. , 12.4 , -7.1 , 4.9 ], 
     [ 30. , -6.8 , 0.47, 3.8 ], 
     [ 40. , 16.2 , 5.7 , -8.3 ]]]) 

而且如果可能的話,我想獲得一個包含你可以看到下面的其餘矩陣R:

>>> Matrix_R 
array([[[ 15. , -1.4, -6.4, 8.1], 
     [ 25. , -1.5, 6.2, -4.8], 
     [ 35. , 5.4, -4.8, 10.5]]]) 

主要目標是比較Matrix_AMatrix_A_extract_from_Matrix_B

我真正的問題是將矩陣與數千行Matrix_A和Matrix B進行比較,它僅僅是一個簡化問題的例子。

非常感謝您的幫助。

回答

1

首先,因爲你的數組是三維數組,你應該擠壓大小以將它們轉換爲二維數組以便於計算。

In [27]: Matrix_A = np.squeeze(Matrix_A) 

In [28]: Matrix_B = np.squeeze(Matrix_B) 

然後你可以使用np.in1d找到共同的第一列的索引,並用一個簡單的索引中提取它們:

In [29]: Matrix_B[np.in1d(Matrix_B[:, 0],Matrix_A[:, 0])] 
Out[29]: 
array([[ 10. , 2.7 , 4.8 , -5.8 ], 
     [ 20. , 12.4 , -7.1 , 4.9 ], 
     [ 30. , -6.8 , 0.47, 3.8 ], 
     [ 40. , 16.2 , 5.7 , -8.3 ]]) 

In [30]: Matrix_B[np.logical_not(np.in1d(Matrix_B[:, 0],Matrix_A[:, 0]))] 
Out[30]: 
array([[ 15. , -1.4, -6.4, 8.1], 
     [ 25. , -1.5, 6.2, -4.8], 
     [ 35. , 5.4, -4.8, 10.5]]) 
+0

非常感謝它到底是什麼,我想 – nekcorp

+0

@nekcorp所以講這個通過接受/投票答案給社區。 ;-) – Kasramvd