2014-10-06 30 views
6

Nếu bạn chọn một trong ba cách sau để khởi tạo một mảng với số không bạn chọn và tại sao?np.full (kích thước, 0) so với np.zeros (kích thước) so với np.empty()

my_arr_1 = np.full(size, 0) 

hoặc

my_arr_2 = np.zeros(size) 

hoặc

my_arr_3 = np.empty(size) 
my_arr_3[:] = 0 
+0

Đây chính là điều 'np .zeros' là dành cho. Tại sao * sẽ không * bạn sử dụng nó? –

+0

Tôi đang sử dụng nó thực sự. Tuy nhiên, tôi không chắc chắn một trong những cách này là hiệu quả nhất về mặt thời gian và sử dụng bộ nhớ! – Dataman

Trả lời

3

Tôi muốn sử dụng np.zeros, vì tên của nó. Tôi sẽ không bao giờ sử dụng thành ngữ thứ ba bởi vì (1) nó có hai câu lệnh thay vì một biểu thức duy nhất và (2) khó hơn cho những người NumPy để tối ưu hóa. Trong thực tế, trong NumPy 1.10, np.zeros vẫn là lựa chọn nhanh nhất, mặc dù tất cả các tối ưu hóa để lập chỉ mục:

>>> %timeit np.zeros(1e6) 
1000 loops, best of 3: 804 µs per loop 
>>> %timeit np.full(1e6, 0) 
1000 loops, best of 3: 816 µs per loop 
>>> %timeit a = np.empty(1e6); a[:] = 0 
1000 loops, best of 3: 919 µs per loop 

Bigger mảng để so sánh với kết quả @ John Zwinck của:

>>> %timeit np.zeros(1e8) 
100000 loops, best of 3: 9.66 µs per loop 
>>> %timeit np.full(1e8, 0) 
1 loops, best of 3: 614 ms per loop 
>>> %timeit a = np.empty(1e8); a[:] = 0 
1 loops, best of 3: 229 ms per loop 
+1

"đầy đủ" và nhiệm vụ là giống nhau, mặc dù tất nhiên tôi muốn đề cập đến rằng tôi thích 'a [...] = 0' thay vì' a [:] '. số không hiện nay cho biết hạt nhân không bằng bộ nhớ. – seberg

+1

@seberg Điều đó không giải thích tại sao 'đầy đủ 'chậm hơn rất nhiều so với' [:] = 0' ... –

+0

Không, nhưng nó không nằm trong số đo của tôi :) – seberg

2

Chắc chắn np.zeros. Đây không chỉ là cách thành ngữ và phổ biến nhất để làm điều này, mà còn nhanh nhất:

In [1]: size=100000000 

In [3]: %timeit np.full(size, 0) 
1 loops, best of 3: 344 ms per loop 

In [4]: %timeit np.zeros(size) 
100000 loops, best of 3: 8.75 µs per loop 

In [5]: %timeit a = np.empty(size); a[:] = 0 
1 loops, best of 3: 322 ms per loop 
Các vấn đề liên quan