2015-09-23 3 views
7

sto generando una matrice 2D di interi casuali usando NumPy:Come ottenere array di interi casuali di tipo non predefinito in NumPy

import numpy 
arr = numpy.random.randint(16, size = (4, 4)) 

Questo è solo un esempio. L'array che sto generando è in realtà enorme e di dimensioni variabili. Dato che i numeri vanno sempre da 0 a 16, vorrei risparmiare spazio e avere la matrice di tipo uint8. Ho provato quanto segue

arr = numpy.random.randint(16, size = (width, height), dtype = numpy.uint8) 

nel tentativo di abbinare il comportamento di zeros e ones, ma ottengo il seguente errore:

Traceback (most recent call last): 

File "<ipython-input-103-966a510df1e7>", line 1, in <module> 
    maze = numpy.random.randint(16, size = (width, height), dtype = numpy.uint8) 

    File "mtrand.pyx", line 875, in mtrand.RandomState.randint (numpy/random/mtrand/mtrand.c:9436) 

TypeError: randint() got an unexpected keyword argument 'dtype' 

la documentazione per randint() non menzionano nulla di essere in grado di imposta il tipo. Come posso creare un array casuale con un tipo intero specifico? Non sono legato a nessuna funzione, solo una distribuzione uniforme da 0 a 16 di tipo uint8.

+1

A partire da NumPy 1.11 'randint' ora ha questa opzione' dtype = 'mancante. –

+0

@Hannes. Grazie. Non posso più cancellare la domanda, quindi se dovessi pubblicare una risposta, lo accetterei. –

risposta

5

Il modo più veloce è quello di utilizzare il metodo astype():

x = np.random.randint(16, size=(4,4)).astype('uint8') 

Questo funziona su qualsiasi matrice NumPy. Ma per favore nota che di default non controlla che il casting sia valido.

8

Il problema è che non è possibile specificare np.random.randintdtype

import numpy as np 

random_array = np.random.randint(0,16,(4,4)) 

[[13 13 9 12] 
[ 4 7 2 11] 
[13 3 5 1] 
[ 9 10 8 15]] 

print(random_array.dtype) 

>>int32 

random_array = np.array(random_array,dtype=np.uint8) 

print(random_array.dtype) 

>>uint8