【发布时间】:2018-01-18 13:25:31
【问题描述】:
我有一个数据集X,这样X.shape 会产生(10000, 9)。我想使用以下代码选择X 的子集:
X = np.asarray(np.random.normal(size = (10000,9)))
train_fraction = 0.7 # fraction of X that will be marked as train data
train_size = int(X.shape[0]*train_fraction) # fraction converted to number
test_size = X.shape[0] - train_size # remaining rows will be marked as test data
train_ind = np.asarray([False]*X.shape[0])
train_ind[np.random.randint(low = X.shape[0], size = (train_size,))] = True # mark True at 70% of the places
问题是np.sum(train_ind) 不是 7000 的预期值。相反,它给出了 5033 等随机值。
我最初认为np.random.randint(low = X.shape[0], size = (train_size,)) 可能是罪魁祸首。但是当我做np.random.randint(low = X.shape[0], size = (train_size,)).shape 时,我得到(7000,)。
我哪里出错了?
【问题讨论】:
-
有更好的方法来初始化一个布尔 numpy 数组,看看here,我建议第二好的答案,而不是公认的。
-
@JürgMerlinSpaak 谢谢。这很有帮助。