python – 删除numpy数组中的行无效
发布时间:2020-12-20 11:49:17 所属栏目:Python 来源:网络整理
导读:我试图将我的numpy数据点分成测试和训练集.为此,我从数组中随机选择行作为训练集,剩下的就是测试集. 这是我的代码: matrix = numpy.loadtxt("matrix_vals.data",delimiter=',',dtype=float)matrix_rows,matrix_cols = matrix.shape# training set randvals
我试图将我的numpy数据点分成测试和训练集.为此,我从数组中随机选择行作为训练集,剩下的就是测试集.
这是我的代码: matrix = numpy.loadtxt("matrix_vals.data",delimiter=',',dtype=float) matrix_rows,matrix_cols = matrix.shape # training set randvals = numpy.random.randint(matrix_rows,size=50) train = matrix[randvals,:] test = numpy.delete(matrix,randvals,0) print matrix.shape print train.shape print test.shape 但我得到的输出是: matrix.shape: (130,14) train.shape: (50,14) test.shape: (89,14) 这显然是错误的,因为来自train和test的行数应该加到矩阵中的总行数,但这里显然更多.谁能帮我弄清楚出了什么问题? 解决方法
因为您使用替换生成随机整数,所以randvals几乎肯定会包含重复索引.
使用重复索引进行索引将多次返回同一行,因此矩阵[randvals,:]可确保为您提供正好50行的输出,无论是否重复某些行. 相反,np.delete(矩阵,0)将仅删除唯一行索引,因此它将仅通过randvals中的唯一值的数量来减少行数. 试试比较: print(np.unique(randvals).shape[0] == matrix_rows - test.shape[0]) # True 要生成0到1之间的唯一随机索引向量 – matrix_rows,可以使用 uidx = np.random.choice(matrix_rows,size=50,replace=False) 然后矩阵[uidx] .shape [0] np.delete(矩阵,uidx,0).shape [0] == matrix_rows. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |