从numpy数组删除行不起作用

SanjanaS801

我正在尝试将我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)

这显然是错误的,因为来自训练和测试的行数应总计为矩阵中的行总数,但显然要多得多谁能帮助我找出问题所在?

ali_m

因为您正在生成带有replace的随机整数,所以randvals几乎可以肯定会包含重复索引。

使用重复索引的索引将多次返回同一行,因此matrix[randvals, :]可以确保为您提供正好有50行的输出,而不管其中是否有一些重复。

相反,np.delete(matrix, randvals, 0)只会删除唯一行索引,因此只会减少中的唯一值数量,从而减少行数randvals

尝试比较:

print(np.unique(randvals).shape[0] == matrix_rows - test.shape[0])
# True

要生成的向量独特随机指标介于0和1 - matrix_rows,你可以使用np.random.choicereplace=False

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

然后matrix[uidx].shape[0] + np.delete(matrix, uidx, 0).shape[0] == matrix_rows

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章