加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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,可以使用np.random.choice with replace = False:

uidx = np.random.choice(matrix_rows,size=50,replace=False)

然后矩阵[uidx] .shape [0] np.delete(矩阵,uidx,0).shape [0] == matrix_rows.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读