使用另一个矩阵对NumPy矩阵进行子集
问题描述:
我有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矩阵进行子集
答
如果你愿意创建一个布尔掩码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]])
答
随着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)
有什么特别的原因,他们是矩阵? –
在我以前和以后的代码中使用矩阵很容易。 – mike