【问题标题】:How do I extract a random sample of rows my array?如何提取我的数组的随机行样本?
【发布时间】:2022-01-11 15:55:35
【问题描述】:

我有一个名为 input_north 的 numpy 数组,其形状为 (823886, 13)

我想从这个数组中随机选择 82388 行并将它们存储在另一个名为真值的数组中。但是,我也想从原始 input_north 数组中删除随机采样的行。

这是我所做的,但它不能正常工作:

# first i make 82388 random indices between 1-823886 
indices = np.random.choice(823886, 82388)

# then I use the indices to create my truth array
truth = input_north[indicies, :]

# I then create a new array with the truth rows deleted
input = np.delete(input_north, indices, 0) 

当我这样做时,我会得到一个大小正确的真值数组 (82388, 13),其中包含随机的行样本。但是,输入数组的形状为 (745496, 13)。这意味着并非所有提取到真值数组的行都已在输入数组中删除,因为它包含的行比我想要的多约 4000 行。如何从 inut_north 数据中提取行并删除已提取的行?

【问题讨论】:

  • replace=False 参数添加到np.random.choice?使用minimal reproducible example,您可以更轻松地查看代码中发生的情况。尽量避免影响内置函数的变量名称。
  • 顺便说一句:您正在从0 - 823885 之间的索引中进行选择(包括 0 但不包括 823886)
  • @MichaelSzczesny 谢谢,这解决了我的问题!并指出,我会改变这一点。谢谢!

标签: python arrays numpy indices


【解决方案1】:

也许你可以这样尝试

import numpy as np

# create a array like:
# [1,1,1,1,...]
# [2,2,2,2,...]
# [3,3,3,3,...]
# [...]
# [N,N,N,N,...]

N = 100

data = np.ones((N, 13))
data[:] = data * np.arange(1,data.shape[0]+1)[:,None]
data = data.astype(np.int)

print(data)

# not perutate the array
np.random.shuffle(data)

print(data)

# now choose truth and input
split = 85
input = data[:split]
truth = data[split:]


print("input.shape",input.shape)
print("truth.shape",truth.shape)
input.shape (85, 13)
truth.shape (15, 13)

【讨论】:

  • 谢谢!使用 replace = false 解决了它。我尝试了这种方法,但是在我的 numpy 数组上使用 numpy.random.shuffle() 函数不起作用,并且给出了没有数据的 NoneType 答案。不知道这是为什么?
  • Shuffle 就地工作......所以不,你不能做 data = np.random.shuffle()。上面的代码在你执行时做对了吗?
猜你喜欢
  • 2015-05-22
  • 1970-01-01
  • 1970-01-01
  • 2013-11-28
  • 1970-01-01
  • 1970-01-01
  • 2015-07-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多