numpy中矩阵选取子集或者以条件选取子集,用mask是一种很好的方法
简单来说就是用bool类型的indice矩阵去选择,
1
2
3
4
5
6
7
8
9
10
11
12
|
mask = np.ones(X.shape[ 0 ], dtype = bool ) X[mask].shape mask.shape mask[indices[ 0 ]] = False mask.shape X[mask].shape X[~mask].shape ( 678 , 2 ) ( 678 ,) ( 678 ,) ( 675 , 2 ) ( 3 , 2 ) |
例如我们这里用来选取全部点中KNN选取的点以及所有剩余的点
1
2
3
4
5
6
7
|
from sklearn.neighbors import NearestNeighbors nbrs = NearestNeighbors( 10 ).fit(X) _,indices = nbrs.kneighbors(X) mask = np.ones(X.shape[ 0 ], dtype = bool ) mask[indices[ 0 ]] = False plt.scatter(X[mask][:, 0 ],X[mask][:, 1 ],c = 'g' ) plt.scatter(X[~mask][:, 0 ],X[~mask][:, 1 ],c = 'r' ) |
带条件选择替换,比如我们需要将a矩阵内某条件的行置换为888剩余置换为999,可以直接用mask或者再用where一步搞定:
1
2
3
4
5
6
|
mask = np.ones(a.shape,dtype = bool ) #np.ones_like(a,dtype=bool) mask[indices] = False a[~mask] = 999 a[mask] = 888 ############# np.where(mask, 888 , 999 ) |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://frankchen.xyz/2018/07/20/numpy-mask