如何在numpy中获取非默认类型的随机整数数组

Mad*_*ist 12 python random numpy

我正在使用numpy生成一个随机整数的2D数组:

import numpy
arr = numpy.random.randint(16, size = (4, 4))
Run Code Online (Sandbox Code Playgroud)

这只是一个例子.我生成的数组实际上是巨大的,并且大小可变.由于数字总是从0到16,我想节省一些空间并使数组类型uint8.我尝试了以下内容

arr = numpy.random.randint(16, size = (width, height), dtype = numpy.uint8)
Run Code Online (Sandbox Code Playgroud)

在尝试匹配的行为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'
Run Code Online (Sandbox Code Playgroud)

文档中randint()没有提到任何关于能够设置类型的内容.如何创建具有特定整数类型的随机数组?我没有绑定任何一个函数,只是从0到16类型的均匀分布uint8.

Han*_*rén 11

最快的方法是使用以下astype()方法:

x = np.random.randint(16, size=(4,4)).astype('uint8')
Run Code Online (Sandbox Code Playgroud)

这适用于任何numpy数组.但请注意,默认情况下它不会检查转换是否有效.


Leb*_*Leb 9

问题是np.random.randint无法指定dtype

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
Run Code Online (Sandbox Code Playgroud)