2017-07-05 28 views
2

我想比較一個70x1矩陣和一個1000x3矩陣。我想要做的是將第二個矩陣的第一列與第一個矩陣進行比較,找到所有常見值,然後將結果存儲在一個新的第三個矩陣中,該矩陣將包含所有3列。比較Python中的矩陣和存儲結果

我用np.intersect1d來找出這兩個矩陣之間的共同值,但就是這樣。

我無法找到一種方法將第二個矩陣的其他兩列導入到新的矩陣。

矩陣1

[1.0 

4.7 

4.8 

4.9 

5.0 

5.1] 

矩陣2

[[3.0, 1.8, -3.0] 

[3.1, 2.2, -3.0] 

[4.7, 2.4, -3.0] 

[3.3, 2.8, -3.0] 

[3.40, 3.0, -3.0]] 

Matrix3

[4.7, 2.4, -3.0] 
+0

聽起來非常接近 - https://開頭stackoverflow.com/q/44921316 – Divakar

+0

你可以發佈1.有效的Python數組和2.所需的輸出? –

回答

1

您可以使用np.in1d

a = numpy.array([1.0,4.7,4.8,4.9,5.0,5.1]) 
b = numpy.array([ 
    [3.0, 1.8, -3.0], 
    [3.1, 2.2, -3.0], 
    [4.7, 2.4, -3.0], 
    [3.3, 2.8, -3.0], 
    [3.40, 3.0, -3.0] 
]) 

c = b[numpy.in1d(b[:, 0], a), :] 
# array([[ 4.7, 2.4, -3. ]]) 
1

取每個矩陣的第一列的值,轉換爲設置,交叉並轉換回列表(或np.array ):

matrix3 = list(set(y for x in matrix1[:,:1] for y in x) & set(y for x in matrix2[:,:1] for y in x)) 
+0

我收到一個錯誤'數組索引太多'。我很抱歉,但我很興奮編碼 – Giomix88

+0

@ Giomix88,因爲根據您發佈的「matrix1」的表示,它不是矩陣而是一維矢量。 – Uriel

1

我沒有看到numpy的需要:

m1 = [1.0, 4.7, 4.8, 4.9, 5.0, 5.1] 
m2 = [[3.0, 1.8, -3.0], 
[3.1, 2.2, -3.0], 
[4.7, 2.4, -3.0], 
[3.3, 2.8, -3.0], 
[3.40, 3.0, -3.0]] 

output = [] 
for value in m2: 
    if value[0] in m1: 
     output.append(value) 

print(output) 

給出:

[[4.7, 2.4, -3.0]]