web-dev-qa-db-ja.com

numpyでデフォルト以外のタイプのランダムな整数の配列を取得する方法

私はnumpyを使用してランダムな整数の2D配列を生成しています:

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

これは単なる例です。私が生成している配列は実際には巨大で可変サイズです。数値は常に0〜16になるため、スペースを節約し、配列を_uint8_型にする必要があります。私は以下を試しました

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

zerosonesの動作を一致させようとすると、次のエラーが発生します。

_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'
_

randint()のドキュメントでは、タイプを設定できることについては何も触れられていません。特定の整数型でランダム配列を作成するにはどうすればよいですか?私は、1つの関数に縛られるのではなく、タイプ_uint8_の0から16までの一様分布にすぎません。

12
Mad Physicist

最短の方法は astype() メソッドを使用することです:

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

これは任意のnumpy配列で機能します。ただし、デフォルトではキャストが有効かどうかはチェックされないことに注意してください。

10
Hannes Ovrén

問題は 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
9
Leb