Answers:
>>> A = np.random.randint(5, size=(10,3))
>>> A
array([[1, 3, 0],
[3, 2, 0],
[0, 2, 1],
[1, 1, 4],
[3, 2, 2],
[0, 1, 0],
[1, 3, 1],
[0, 4, 1],
[2, 4, 2],
[3, 3, 1]])
>>> idx = np.random.randint(10, size=2)
>>> idx
array([7, 6])
>>> A[idx,:]
array([[0, 4, 1],
[1, 3, 1]])
一般情况下将其放在一起:
A[np.random.randint(A.shape[0], size=2), :]
对于非替换(numpy 1.7.0+):
A[np.random.choice(A.shape[0], 2, replace=False), :]
我不认为有一种很好的方法可以在不替换1.7之前生成随机列表。也许您可以设置一个小的定义,以确保两个值不相同。
np.random.choice
和一样好,也就是说np.random.permutation(A.shape[0])[:2]
,实际上它并不好,但是这就是目前np.random.choice
的情况……或者,如果您不在乎更改数组,地点,np.random.shuffle
这是旧文章,但这对我来说是最合适的:
A[np.random.choice(A.shape[0], num_rows_2_sample, replace=False)]
将replace = False更改为True可以得到相同的结果,但是要进行替换。
replace=False
到的参数choice
。
如果您需要相同的行而只是随机样本,
import random
new_array = random.sample(old_array,x)
在此,x必须是一个“ int”,用于定义要随机选择的行数。
old_array
是序列或集合而不是numpy数组[link](docs.python.org/3/library/random.html#functions-for-sequences)时
如果要生成多个随机的行子集,例如,如果要执行RANSAC。
num_pop = 10
num_samples = 2
pop_in_sample = 3
rows_to_sample = np.random.random([num_pop, 5])
random_numbers = np.random.random([num_samples, num_pop])
samples = np.argsort(random_numbers, axis=1)[:, :pop_in_sample]
# will be shape [num_samples, pop_in_sample, 5]
row_subsets = rows_to_sample[samples, :]