Eu tenho uma matriz 2D muito grande que se parece com isso:
a=
[[a1, b1, c1],
[a2, b2, c2],
...,
[an, bn, cn]]
Usando numpy, existe uma maneira fácil de obter uma nova matriz 2D com, por exemplo, 2 linhas aleatórias da matriz inicial a
(sem substituição)?
por exemplo
b=
[[a4, b4, c4],
[a99, b99, c99]]
Respostas:
Juntando-o para um caso geral:
Para não substituição (numpy 1.7.0+):
Não acredito que haja uma boa maneira de gerar lista aleatória sem substituição antes da 1.7. Talvez você possa configurar uma definição pequena que garanta que os dois valores não sejam os mesmos.
fonte
np.random.choice
, e que sejanp.random.permutation(A.shape[0])[:2]
, na verdade não seja ótima, mas é o quenp.random.choice
neste momento ... ou se você não quiser alterar sua matriz. local,np.random.shuffle
Este é um post antigo, mas é o que funciona melhor para mim:
altere o replace = False para True para obter a mesma coisa, mas com a substituição.
fonte
replace=False
parâmetro adicionado achoice
.Outra opção é criar uma máscara aleatória se você quiser apenas fazer uma amostragem reduzida de seus dados por um determinado fator. Digamos que eu queira fazer uma amostragem reduzida para 25% do meu conjunto de dados original, atualmente mantido na matriz
data_arr
:Agora você pode chamar
data_arr[mask]
e retornar ~ 25% das linhas, amostradas aleatoriamente.fonte
Essa é uma resposta semelhante à fornecida por Hezi Rasheff, mas simplificada para que novos usuários de python entendam o que está acontecendo (notei que muitos novos estudantes de ciência de dados obtêm amostras aleatórias das maneiras mais estranhas, porque não sabem o que estão fazendo em python).
Você pode obter vários índices aleatórios da sua matriz usando:
Você pode usar o fatiamento com sua matriz numpy para obter as amostras nesses índices:
Isso fornecerá o número especificado de amostras aleatórias dos seus dados.
fonte
Se você precisar das mesmas linhas, mas apenas uma amostra aleatória,
Aqui x, deve ser um 'int' definindo o número de linhas que você deseja escolher aleatoriamente.
fonte
old_array
é uma sequência ou um conjunto, não uma matriz numpy [Link] ( docs.python.org/3/library/random.html#functions-for-sequences )Vejo que a permutação foi sugerida. De fato, ele pode ser transformado em uma linha:
fonte
Se você deseja gerar vários subconjuntos aleatórios de linhas, por exemplo, se você estiver executando o RANSAC.
fonte