2015-09-23 15 views
7

Tôi đang tạo ra một mảng 2D của các số nguyên ngẫu nhiên sử dụng NumPy:Làm thế nào để có được mảng các số nguyên ngẫu nhiên của các loại không mặc định trong NumPy

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

Đây chỉ là một ví dụ. Mảng tôi đang tạo ra thực sự rất lớn và có kích thước thay đổi. Vì các con số luôn luôn là từ 0 đến 16, tôi muốn tiết kiệm một số không gian và có mảng là loại uint8. Tôi đã thử những điều sau

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

trong một nỗ lực để phù hợp với hành vi của zerosones, nhưng tôi nhận được lỗi sau:

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' 

Các tài liệu cho randint() không đề cập đến bất cứ điều gì về việc có thể đặt loại. Làm cách nào để tạo một mảng ngẫu nhiên với một kiểu số nguyên cụ thể? Tôi không gắn với bất kỳ một chức năng nào, chỉ phân phối đồng đều từ 0 đến 16 thuộc loại uint8.

+1

Kể từ NumPy 1.11 'randint' hiện có tùy chọn thiếu 'dtype =' này. –

+0

@Hannes. Cảm ơn. Tôi không thể xóa câu hỏi nữa, vì vậy nếu bạn đăng câu trả lời, tôi sẽ chấp nhận câu hỏi đó. –

Trả lời

5

Cách nhanh nhất là sử dụng phương pháp astype():

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

này hoạt động trên bất kỳ mảng NumPy. Nhưng xin lưu ý rằng theo mặc định, nó không kiểm tra xem quá trình truyền có hợp lệ hay không.

8

Vấn đề là np.random.randint không thể xác định 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 
Các vấn đề liên quan