2017-09-02 172 views
0

我有numpy矩陣X = np.matrix([[1, 2], [3, 4], [5, 6]])y = np.matrix([1, 1, 0]),我想根據y矩陣創建兩個新的矩陣X_pos和X_neg。所以希望我的輸出如下:X_pos == matrix([[1, 2], [3, 4]])X_neg == matrix([[5, 6]])。我怎樣才能做到這一點?使用另一個矩陣對NumPy矩陣進行子集

+0

有什麼特別的原因,他們是矩陣? –

+0

在我以前和以後的代碼中使用矩陣很容易。 – mike

回答

2

如果你願意創建一個布爾掩碼y,這變得很簡單。

mask = np.array(y).astype(bool).reshape(-1,) 
X_pos = X[mask, :] 
X_neg = X[~mask, :] 

print(X_pos) 
matrix([[1, 2], 
     [3, 4]]) 

print(X_neg) 
matrix([[5, 6]]) 
1

隨着np.ma.masked_where常規:

x = np.matrix([[1, 2], [3, 4], [5, 6]]) 
y = np.array([1, 1, 0]) 

m = np.ma.masked_where(y > 0, y) # mask for the values greater than 0 
x_pos = x[m.mask]     # applying masking 
x_neg = x[~m.mask]     # negation of the initial mask 

print(x_pos) 
print(x_neg)