gpt4 book ai didi

python - 从 numpy 数组中删除行不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 13:14:04 25 4
gpt4 key购买 nike

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

这显然是错误的,因为训练和测试的行数应该加起来等于矩阵中的总行数但这里显然更多。谁能帮我找出问题所在?

最佳答案

因为您正在生成随机整数替换randvals 几乎肯定会包含重复索引。

使用重复索引进行索引会多次返回同一行,因此 matrix[randvals, :] 保证为您提供恰好 50 行的输出,无论其中一些是否重复。

相比之下,np.delete(matrix, randvals, 0) 只会删除 unique 行索引,因此它只会减少行数randvals 中的唯一值。

尝试比较:

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

要生成介于 0 和 1 - matrix_rows 之间的唯一 随机索引向量,您可以使用 np.random.choice使用 replace=False:

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

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

关于python - 从 numpy 数组中删除行不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35233641/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com