Đăng ký nhận thông tin về những video mới nhất
Mục lục bài viết :
- Giá trị trả lại và các tham số của np.arange ()
- Đối số phạm vi của np.arange ()
- Cung cấp tất cả các đối số phạm vi
- Cung cấp hai đối số phạm vi
- Cung cấp đối số một phạm vi
- Cung cấp đối số phủ định
- Đếm ngược
- Nhận Mảng trống
- Các kiểu dữ liệu của np.arange ()
- Vượt ra ngoài phạm vi đơn giản với np.arange ()
- So sánh phạm vi và np.arange ()
- Tham số và kết quả đầu ra
- Tạo chuỗi
- Python cho các vòng lặp
- Các quy trình khác dựa trên phạm vi số
- Tóm tắt nhanh
- Phần kết luận
NumPy là thư viện Python cơ bản cho tính toán số. Kiểu quan trọng nhất của nó là kiểu mảng được gọi ndarray
. NumPy cung cấp rất nhiều quy trình tạo mảng cho các trường hợp khác nhau. arange()
là một trong những hàm như vậy dựa trên phạm vi số . Nó thường được gọi là np.arange()
vì np
là từ viết tắt được sử dụng rộng rãi của NumPy.
Bạn đang đọc: Python: NumPy arange(): Cách sử dụng np.arange()
Tạo mảng NumPy rất quan trọng khi bạn đang thao tác với những thư viện Python khác dựa vào chúng, như SciPy, Pandas, Matplotlib, scikit-learning, v.v. NumPy thích hợp để tạo và thao tác với mảng vì nó phân phối những quá trình hữu dụng, được cho phép tăng hiệu suất và được cho phép bạn viết mã ngắn gọn .
Đến cuối bài viết này, bạn sẽ biết :
- có gì
np.arange()
là - Cách sử dụng
np.arange()
- Làm thế nào
np.arange()
so sánh với Python built-in Classrange
- Những quy trình tương tự như
np.arange()
Hãy xem np.arange()
trong hành động!
Tóm Tắt
Giá trị trả lại và các thông số của np.arange()
NumPy arange()
là một trong những quy trình tạo mảng dựa trên phạm vi số. Nó tạo ra một thể hiện ndarray
với các giá trị cách đều nhau và trả về tham chiếu đến nó.
Bạn có thể xác định khoảng thời gian của các giá trị có trong một mảng, khoảng cách giữa chúng và kiểu của chúng với bốn tham số arange()
:
numpy.arange( [start, ]stop, [step, ], dtype=None) -> numpy.ndarray
Ba tham số tiên phong xác lập khoanh vùng phạm vi của những giá trị, trong khi tham số thứ tư chỉ định loại của những thành phần :
start
là số (số nguyên hoặc số thập phân) xác định giá trị đầu tiên trong mảng.stop
là số xác định phần cuối của mảng và không được bao gồm trong mảng.step
là số xác định khoảng cách (hiệu số) giữa hai giá trị liên tiếp trong mảng và mặc định là1
.dtype
là kiểu của các phần tử của mảng đầu ra và mặc định làNone
.
step
không thể bằng không. Nếu không, bạn sẽ nhận được một ZeroDivisionError
. Bạn không thể di chuyển đi bất cứ đâu start
nếu tăng hoặc giảm 0
.
Nếu dtype
được bỏ qua, arange()
sẽ cố gắng để suy ra kiểu của các phần tử mảng từ các loại start
, stop
và step
.
Bạn có thể tìm thêm thông tin về các tham số và giá trị trả về arange()
trong tài liệu chính thức .
Đối số phạm vi của np.arange()
Những lập luận của NumPy arange()
xác định các giá trị chứa trong tương ứng với mảng đến các thông số số start
, stop
, và step
. Bạn phải vượt qua ít nhất một trong số chúng.
Các ví dụ sau sẽ cho bạn thấy cách arange()
hoạt động tùy thuộc vào số lượng đối số và giá trị của chúng.
Cung cấp tất cả các đối số phạm vi
Khi thao tác với những quá trình NumPy, thứ nhất bạn phải nhập NumPy :
>> >
>> >import numpy as np
Bây giờ, bạn đã nhập NumPy và bạn đã sẵn sàng đăng ký arange()
.
Hãy xem ví dụ đầu tiên về cách sử dụng NumPy arange()
:
>> >
>> >np.arange(start=1, stop=10, step=3)
array ( [ 1, 4, 7 ] )
Trong ví dụ này, start
là 1
. Do đó, phần tử đầu tiên của mảng thu được là 1
. step
là 3
, đó là lý do tại sao giá trị thứ hai của bạn là 1 + 3 4
, trong khi giá trị thứ ba trong mảng là 4 + 3, bằng 7
.
Theo mẫu này, giá trị tiếp theo sẽ là 10
(7 + 3), nhưng việc đếm phải được kết thúc trước khi stop
đạt được, vì vậy giá trị này không được bao gồm.
Bạn có thể vượt qua start
, stop
và step
như các đối số vị trí cũng như:
>> >
>> >np.arange(1, 10, 3)
array ( [ 1, 4, 7 ] )
Mẫu mã này tương tự, nhưng ngắn gọn hơn mẫu trước .
Giá trị của stop
không được bao gồm trong một mảng. Đó là lý do tại sao bạn có thể nhận được các kết quả giống hệt nhau với các stop
giá trị khác nhau :
>> >
>> >np.arange(1, 8, 3)
array ( [ 1, 4, 7 ] )
Mẫu mã này trả về mảng có cùng giá trị với hai giá trị trước đó. Bạn có thể nhận được cùng một kết quả với bất kỳ giá trị nào stop
lớn hơn 7
và nhỏ hơn hoặc bằng 10
.
Tuy nhiên, nếu bạn thực hiện stop
lớn hơn 10
, thì việc đếm sẽ kết thúc sau khi 10
đạt được:
>> >
>> >np.arange(1, 10.1, 3)
array ( [ 1., 4., 7., 10. ] )
Trong trường hợp này, bạn nhận được mảng có bốn phần tử bao gồm 10
.
Lưu ý rằng ví dụ này tạo ra một mảng các số dấu phẩy động, không giống như ví dụ trước. Đó là bởi vì bạn chưa xác định dtype
, và arange()
suy ra nó cho bạn. Bạn sẽ tìm hiểu thêm về điều này sau trong bài viết.
Bạn hoàn toàn có thể xem trình diễn đồ họa của ba ví dụ này trong hình bên dưới :
start
được hiển thị bằng màu xanh lá cây, stop
màu đỏ, trong khi step
và các giá trị chứa trong các mảng là màu xanh lam.
Như bạn có thể nhìn thấy từ hình trên, hai ví dụ đầu tiên có ba giá trị ( 1
, 4
và 7
) tính. Chúng không cho phép 10
được đưa vào. Trong ví dụ thứ ba, stop
lớn hơn 10
, và nó được chứa trong mảng kết quả.
Cung cấp hai đối số phạm vi
Bạn có thể bỏ qua step
. Trong trường hợp này, hãy arange()
sử dụng giá trị mặc định của nó là 1
. Hai câu lệnh sau là tương đương:
>> >
>> >np.arange(start=1, stop=10, step=1)
array ( [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ] )
>> >np.arange(start=1, stop=10)
array ( [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ] )
Câu lệnh thứ hai ngắn hơn. step
, mặc định 1
là những gì thường được mong đợi bằng trực giác.
Sử dụng arange()
với gia số 1
là một trường hợp rất phổ biến trong thực tế. Một lần nữa, bạn có thể viết ví dụ trước ngắn gọn hơn với các đối số vị trí start
và stop
:
>> >
>> >np.arange(1, 10)
array ( [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ] )
Đây là một cách gọi trực quan và ngắn gọn arange()
. Sử dụng các đối số từ khóa trong ví dụ này không thực sự cải thiện khả năng đọc.
Lưu ý: Nếu bạn cung cấp hai đối số vị trí, thì đối số đầu tiên là start
và đối số thứ hai là stop
.
Cung cấp đối số một phạm vi
Bạn phải cung cấp ít nhất một đối số tới arange()
. Nói chính xác hơn, bạn phải cung cấp start
.
Nhưng điều gì sẽ xảy ra nếu bạn bỏ qua stop
? Làm thế nào để arange()
biết khi nào ngừng đếm? Trong trường hợp này, mảng bắt đầu tại 0
và kết thúc trước khi start
đạt đến giá trị của ! Một lần nữa, giá trị mặc định của step
là 1
.
Nói cách khác, arange()
giả sử rằng bạn đã cung cấp stop
(thay vì start
) và đó start
là 0
và step
đang có 1
.
Hãy xem một ví dụ mà bạn muốn bắt đầu một mảng 0
, tăng các giá trị lên 1
và dừng lại trước 10
:
>> >
>> >np.arange(start=0, stop=10, step=1)
array ( [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ] )
>> >np.arange(0, 10, 1)
array ( [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ] )
>> >np.arange(start=0, stop=10)
array ( [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ] )
>> >np.arange(0, 10)
array ( [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ] )
Những mẫu mã này là được. Chúng hoạt động giải trí như bộc lộ trong những ví dụ trước. Có một cách thậm chí còn ngắn hơn và ngăn nắp hơn, nhưng vẫn trực quan, để làm điều tựa như. Bạn chỉ hoàn toàn có thể phân phối một đối số vị trí duy nhất :
>> >
>> >np.arange(10) # Stop is 10, start is 0, and step is 1 !
array ( [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ] )
Đây là cách thường thì nhất để tạo một mảng NumPy khởi đầu từ 0 và có số gia là một .
Lưu ý: Đối số đơn xác định vị trí dừng đếm. Mảng đầu ra bắt đầu từ 0
và có giá trị gia tăng 1
.
Nếu bạn cố gắng cung cấp rõ ràng stop
mà không có start
, thì bạn sẽ nhận được TypeError
:
>> >
>> >np.arange(stop=10)
Traceback ( most recent call last ) :
File ""
, line 1, in
TypeError: arange ( ) missing required argument ' start ' ( pos 1 )
Bạn gặp lỗi vì arange()
không cho phép bạn tránh rõ ràng đối số đầu tiên tương ứng với start
. Nếu bạn cung cấp một đối số duy nhất, thì nó phải như vậy start
, nhưng arange()
sẽ sử dụng nó để xác định vị trí dừng đếm.
Cung cấp đối số phủ định
Nếu bạn cung cấp các giá trị âm cho start
hoặc cả hai start
và stop
và có một giá trị dương step
, thì arange()
sẽ hoạt động giống như với tất cả các đối số khẳng định:
>> >
>> >np.arange(-5, -1)
array ( [ - 5, - 4, - 3, - 2 ] )
>> >np.arange(-8, -2, 2)
array ( [ - 8, - 6, - 4 ] )
>> >np.arange(-5, 6, 4)
array ( [ - 5, - 1, 3 ] )
Hành vi này hoàn toàn phù hợp với các ví dụ trước. Việc đếm bắt đầu bằng giá trị của start
, tăng lên nhiều lần step
và kết thúc trước khi stop
đạt đến giá trị.
Đếm ngược
Đôi khi bạn sẽ muốn một mảng có các giá trị giảm dần từ trái sang phải. Trong những trường hợp như vậy, bạn có thể sử dụng arange()
với giá trị âm cho step
và với giá trị start
lớn hơn stop
:
>> >
>> >np.arange(5, 1, -1)
array ( [ 5, 4, 3, 2 ] )
>> >np.arange(7, 0, -3)
array ( [ 7, 4, 1 ] )
Trong ví dụ này, hãy lưu ý mẫu sau: mảng thu được bắt đầu bằng giá trị của đối số đầu tiên và giảm dần đối step
với giá trị của đối số thứ hai.
Trong câu lệnh cuối cùng, start
là 7
, và mảng kết quả bắt đầu bằng giá trị này. step
là -3
vì vậy giá trị thứ hai là 7 + (- 3), đó là 4
. Giá trị thứ ba là 4 + (- 3) hoặc 1
. Việc đếm dừng ở đây vì stop
( 0
) đạt đến trước giá trị tiếp theo ( -2
).
Bạn hoàn toàn có thể xem những trình diễn đồ họa của ví dụ này trong hình bên dưới :
Một lần nữa, start
được hiển thị bằng màu xanh lá cây, stop
màu đỏ, trong khi step
và các giá trị chứa trong mảng là màu xanh lam.
Lần này, các mũi tên chỉ hướng từ phải sang trái. Đó là bởi vì start
lớn hơn stop
, step
là âm, và về cơ bản bạn đang đếm ngược.
Ví dụ trước cho tác dụng tựa như như sau :
>> >
>> >np.arange(1, 8, 3) [ ::-1]
array ( [ 7, 4, 1 ] )
>> >np.flip(np.arange(1, 8, 3) )
array ( [ 7, 4, 1 ] )
Tuy nhiên, biến thể với giá trị âm step
là thanh lịch và ngắn gọn hơn.
Nhận Mảng trống
Có một số trường hợp cạnh mà bạn có thể lấy các mảng NumPy trống arange()
. Đây là những trường hợp thường xuyên numpy.ndarray
không có bất kỳ phần tử nào.
Nếu bạn cung cấp các giá trị bằng nhau cho start
và stop
, thì bạn sẽ nhận được một mảng trống:
>> >
>> >np.arange(2, 2)
array ( [ ], dtype = int64 )
Điều này là do việc đếm kết thúc trước khi stop
đạt đến giá trị của . Vì giá trị của start
bằng stop
, nên nó cũng không thể được tiếp cận và đưa vào mảng kết quả.
Một trong những trường hợp bất thường là khi nào start
lớn hơn stop
và step
dương, hoặc khi start
nhỏ hơn stop
và step
âm:
>> >
>> >np.arange(8, 2, 1)
array ( [ ], dtype = int64 )
>> >np.arange(2
, 8, -1)
array ( [ ], dtype = int64 )
Như bạn hoàn toàn có thể thấy, những ví dụ này dẫn đến những mảng trống, không có lỗi .
Các loại dữ liệu của np.arange()
Kiểu của các phần tử trong mảng NumPy là một khía cạnh quan trọng của việc sử dụng chúng. Khi làm việc với arange()
, bạn có thể chỉ định loại phần tử với tham số dtype
.
Lưu ý : Dưới đây là 1 số ít điểm quan trọng về kiểu của những thành phần có trong mảng NumPy :
- Tất cả các phần tử trong một mảng NumPy có cùng kiểu gọi là dtype (viết tắt của kiểu dữ liệu ).
- Các kiểu NumPy cho phép chi tiết hơn các kiểu số tích hợp sẵn của Python.
- Trong một số trường hợp, kiểu NumPy có bí danh tương ứng với tên của kiểu tích hợp sẵn trong Python.
- Thông thường, các quy trình NumPy có thể chấp nhận các kiểu số Python và ngược lại.
- Một số kiểu NumPy có định nghĩa phụ thuộc vào nền tảng.
Nếu bạn muốn khám phá thêm về những kiểu của mảng NumPy, vui mừng đọc tài liệu chính thức .
Bạn có thể tự do bỏ qua dtype
. Trong trường hợp này, arange()
sẽ cố gắng suy ra kiểu của mảng kết quả. Nó phụ thuộc vào các loại start
, stop
và step
, như bạn có thể thấy trong ví dụ sau:
>> >
>> >x = np.arange(5)
>> >x
array ( [ 0, 1, 2, 3, 4 ] )
>> >x.dtype
dtype ( ' int64 ' )
>> >x.itemsize # In bytes
8
Ở đây, có một đối số ( 5
) xác định phạm vi giá trị. Loại của nó là int
. Đó là lý do tại sao dtype của mảng x
sẽ là một trong những kiểu số nguyên được cung cấp bởi NumPy. Trong trường hợp này, NumPy chọn int64
kiểu theo mặc định. Đây là kiểu số nguyên 64 bit (8 byte).
Mảng trong ví dụ trước tương tự với mảng này :
>> >
>> >x = np.arange(5, dtype=int)
>> >x
array ( [ 0, 1, 2, 3, 4 ] )
>> >x.dtype
dtype ( ' int64 ' )
Đối số dtype=int
không tham chiếu đến Python int
. Nó dịch sang NumPy int64
hoặc đơn giản np.int
.
NumPy phân phối cho bạn 1 số ít kiểu số nguyên có size cố định và thắt chặt khác nhau về bộ nhớ và số lượng giới hạn :
np.int8
: Số nguyên có dấu 8 bit (từ-128
đến127
)np.uint8
: Số nguyên không dấu 8 bit (từ0
đến255
)np.int16
: Số nguyên có dấu 16 bit (từ-32768
đến32767
)np.uint16
: Số nguyên không dấu 16 bit (từ0
đến65535
)np.int32
: Số nguyên có dấu 32 bit (từ-2**31
đến2**31-1
)np.uint32
: Số nguyên không dấu 32 bit (từ0
đến2**32-1
)np.int64
: Số nguyên có dấu 64 bit (từ-2**63
đến2**63-1
)np.uint64
: Số nguyên không dấu 64 bit (từ0
đến2**64-1
)
Nếu bạn muốn các kiểu số nguyên khác cho các phần tử trong mảng của mình, thì chỉ cần chỉ định dtype
:
>> >
>> >x = np.arange(5, dtype=np.int32)
>> >x
array ( [ 0, 1, 2, 3, 4 ], dtype = int32 )
>> >x.dtype
dtype ( ' int32 ' )
>> >x.itemsize # In bytes
4
Bây giờ mảng kết quả có các giá trị giống như trong trường hợp trước, nhưng kiểu và kích thước của các phần tử khác nhau. Đối số dtype=np.int32
(hoặc dtype='int32'
) buộc kích thước của mỗi phần tử x
là 32 bit (4 byte).
Khi đối số của bạn là số thập phân thay vì số nguyên, kiểu dtype sẽ là một số kiểu dấu phẩy động NumPy, trong trường hợp này float64
:
>> >
>> >y = np.arange(5.0)
>> >y
array ( [ 0., 1., 2., 3., 4. ] )
>> >y.dtype
dtype ( ' float64 ' )
Giá trị của những thành phần giống nhau trong bốn ví dụ ở đầu cuối, nhưng những kiểu khác nhau .
Nói chung, khi bạn cung cấp ít nhất một đối số dấu phẩy động arange()
, mảng kết quả sẽ có các phần tử dấu phẩy động, ngay cả khi các đối số khác là số nguyên:
>> >
>> >np.arange(1, 5.1)
array ( [ 1., 2., 3., 4., 5. ] )
>> >np.arange(1, 5.1).dtype
dtype ( ' float64 ' )
>> >np.arange(0, 9, 1.5)
array ( [ 0., 1.5, 3., 4.5, 6., 7.5 ] )
>> >np.arange(0, 9, 1.5).dtype
dtype ( ' float64 ' )
Trong các ví dụ trên, start
là một số nguyên, nhưng kiểu là np.float64
vì stop
hoặc step
là các số dấu phẩy động.
Nếu bạn chỉ định dtype
, thì arange()
sẽ cố gắng tạo ra một mảng với các phần tử của kiểu dữ liệu được cung cấp:
>> >
>> >y = np.arange(5, dtype=float)
>> >y
array ( [ 0., 1., 2., 3., 4. ] )
>> >y.dtype
dtype ( ' float64 ' )
Đối số dtype=float
ở đây được dịch thành NumPy float64
, nghĩa là np.float
. Nó không đề cập đến Python float
. Các bí danh có kích thước cố định cho float64
là np.float64
và np.float_
.
Khi bạn cần một kiểu dấu phẩy động với độ đúng chuẩn và kích cỡ thấp hơn ( tính bằng byte ), bạn hoàn toàn có thể chỉ định rõ ràng rằng :
>> >
>> >z = np.arange(5, dtype=np.float32)
>> >z
array ( [ 0., 1., 2., 3., 4. ], dtype = float32 )
>> >z.dtype
dtype ( ' float32 ' )
Sử dụng dtype=np.float32
(hoặc dtype='float32'
) làm cho mỗi phần tử của mảng z
32 bit (4 byte) lớn. Kích thước của mỗi phần tử y
là 64 bit (8 byte):
>> >
>> >y.itemsize # In bytes
8
>> >z.itemsize # In bytes
4
Sự khác biệt giữa các phần tử của y
và z
, và nói chung là giữa np.float64
và np.float32
, là bộ nhớ được sử dụng và độ chính xác: phần tử đầu tiên lớn hơn và chính xác hơn phần tử thứ hai.
Trong nhiều trường hợp, bạn sẽ không nhận thấy sự khác biệt này. Tuy nhiên, đôi khi nó quan trọng. Ví dụ, TensorFlow sử dụng float32
vàint32
. Tương tự như vậy, khi bạn đang làm việc với hình ảnh, thậm chí các loại nhỏ hơn như uint8
được sử dụng .
Khi step
không phải là số nguyên, kết quả có thể không nhất quán do các hạn chế của số học dấu phẩy động .
Vượt ra ngoài phạm vi đơn giản với np.arange()
Bạn có thể thoải mái kết hợp arange()
với các nhà khai thác (như +
, -
, *
, /
, **
, và vân vân) và thói quen NumPy khác (chẳng hạn như abs()
hay sin()
) để tạo ra các dãy các giá trị đầu ra:
>> >
>> >x = np.arange(5)
>> >x
array ( [ 0, 1, 2, 3, 4 ] )
>> >2* *x
array ( [ 1, 2, 4, 8, 16 ] )
>> >y = np.arange(-1, 1.1, 0.5)
>> >y
array ( [ - 1., - 0.5, 0., 0.5, 1. ] )
>> >np.abs(y)
array ( [ 1., 0.5, 0., 0.5, 1. ] )
>> >z = np.arange(10)
>> >np.sin(z)
array ( [ 0., 0.84147098, 0.90929743, 0.14112001, - 0.7568025 ,
- 0.95892427, - 0.2794155, 0.6569866, 0.98935825, 0.41211849 ] )
Điều này đặc biệt quan trọng thích hợp khi bạn muốn tạo một diễn biến trong Matplotlib .
Nếu bạn cần một mảng nhiều chiều, thì bạn có thể kết hợp arange()
với .reshape()
hoặc các hàm và phương thức tương tự:
>> >
>> >a = np.arange(6).reshape( (2, 3) )
>> >a
array ( [ [ 0, 1, 2 ] ,
[ 3, 4, 5 ] ] )
>> >a.shape
( 2, 3 )
>> >a.ndim
2
Đó là cách bạn có thể lấy ndarray
thể hiện với các phần tử [0, 1, 2, 3, 4, 5]
và định hình lại nó thành một mảng hai chiều.
So sánh range
vànp.arange()
Python có một lớp tích hợp range
, tương tự như NumPy arange()
ở một mức độ nào đó. range
và np.arange()
có sự khác biệt quan trọng liên quan đến ứng dụng và hiệu suất. Bạn sẽ thấy sự khác biệt và giống nhau của chúng.
Sự khác biệt chính giữa cả hai là range
một lớp Python được xây dựng trong, trong khi arange()
là một hàm thuộc thư viện của bên thứ ba (NumPy).
Ngoài ra, mục đích của họ là khác nhau! Nói chung, range
phù hợp hơn khi bạn cần lặp lại bằng cách sử dụng vòng lặp Pythonfor
. Nếu bạn muốn tạo một mảng NumPy và áp dụng các vòng lặp nhanh bên dưới, thì đó arange()
là một giải pháp tốt hơn nhiều.
Tham số và kết quả đầu ra
Cả hai range
và arange()
có cùng các tham số xác định phạm vi của các số thu được:
start
stop
step
Bạn áp dụng các tham số này tương tự, ngay cả trong các trường hợp khi start
và stop
bằng nhau.
Tuy nhiên, khi làm việc với range
:
- Bạn phải cung cấp các đối số nguyên. Nếu không, bạn sẽ nhận được một
TypeError
. - Bạn không thể chỉ định loại của các số được kết quả. Nó luôn luôn
int
.
range
và arange()
cũng khác nhau về loại trả lại của chúng:
range
tạo một phiên bản của lớp này có các tính năng giống như các chuỗi khác (nhưlist
vàtuple
), chẳng hạn như thành viên, nối, lặp, cắt, so sánh, kiểm tra độ dài và hơn thế nữa.arange()
trả về một thể hiện của NumPyndarray
.
Tạo chuỗi
Bạn có thể áp dụng range
để tạo một phiên bản của list
hoặc tuple
với các số cách đều nhau trong một phạm vi được xác định trước. Bạn có thể nhận thấy sự hiểu biết đặc biệt thích hợp cho mục đích này.
Tuy nhiên, việc tạo và thao tác với mảng NumPy thường nhanh hơn và lịch sự hơn so với thao tác với list hoặc bộ giá trị .
Hãy so sánh hiệu suất của việc tạo list
bằng cách sử dụng khả năng hiểu với một NumPy tương đương ndarray
với arange()
:
>> >
>> >import timeit
>> >n = 1
>> >timeit.timeit(f' x = [ i * * 2 for i in range ({n}) ] ')
>> >timeit.timeit(f' x = np.arange ({n}) * * 2 ', setup=' import numpy as np ')
Việc lặp lại mã này cho các giá trị khác nhau n
đã mang lại các kết quả sau trên máy của tôi:
Kích thước: n |
Thời gian mỗi vòng lặp: range |
Thời gian mỗi vòng lặp: arange() |
Tỉ lệ |
---|---|---|---|
1 | 497 ns | 1,14 µs | 0,41 |
10 | 2,24 µs | 1,28 µs | 1,74 |
100 | 20,0 µs | 1,37 µs | 14,6 |
1.000 | 211 µs | 2,92 µs | 72.3 |
Các tác dụng này hoàn toàn có thể khác nhau, nhưng rõ ràng bạn hoàn toàn có thể tạo mảng NumPy nhanh hơn nhiều so với một list, ngoại trừ những chuỗi có độ dài rất nhỏ. ( Ứng dụng này thường mang lại những quyền lợi hiệu suất bổ trợ ! )
Điều này là do NumPy thực thi nhiều hoạt động giải trí, gồm có cả lặp, trên C. – level. Ngoài ra, NumPy được tối ưu hóa để thao tác với vectơ và tránh 1 số ít ngân sách tương quan đến Python .
Python for
Loops
Nếu bạn cần các giá trị để lặp lại trong một for
vòng lặp Python , thì đó range
thường là giải pháp tốt hơn. Theo tài liệu Python chính thức:
Ưu điểm của các
range
loại trên thường xuyênlist
hoặctuple
là mộtrange
đối tượng sẽ luôn đi cùng (nhỏ) dung lượng bộ nhớ, không có vấn đề kích thước của dãy nó đại diện (vì nó chỉ lưu trữstart
,stop
vàstep
các giá trị tính toán từng mục và subranges khi cần thiết ). ( Nguồn )
range
thường nhanh hơn so với arange()
khi được sử dụng trong for
các vòng lặp Python , đặc biệt là khi có khả năng thoát ra khỏi vòng lặp sớm. Điều này là do range
tạo ra các số theo kiểu lười biếng, khi chúng được yêu cầu, mỗi lần một số.
Ngược lại, arange()
tạo ra tất cả các số ở đầu.
Để biết thêm thông tin về range
, bạn có thể kiểm tra Hàm Python range () (Hướng dẫn) và tài liệu chính thức .
Các quy trình khác dựa trên phạm vi số
Ngoài ra arange()
, bạn có thể áp dụng các quy trình tạo mảng NumPy khác dựa trên phạm vi số:
linspace()
tương tự nhưarange()
ở chỗ nó trả về các số cách đều nhau. Nhưng bạn có thể chỉ định số lượng giá trị sẽ tạo cũng như có bao gồm điểm cuối hay không và có tạo nhiều mảng cùng một lúc hay không.logspace()
vàgeomspace()
tương tự nhưlinspace()
, ngoại trừ các số trả về được đặt cách đều nhau trên thang logarit.meshgrid()
,ogrid()
vàmgrid()
trả về lưới các điểm được biểu diễn dưới dạng mảng.
Tất cả những tính năng này có những cụ thể đơn cử và những trường hợp sử dụng của chúng. Bạn hoàn toàn có thể chọn một trong những thích hợp theo nhu yếu của bạn .
Như bạn đã thấy, NumPy chứa nhiều quy trình hơn để tạo các phiên bảnndarray
.
Tóm tắt nhanh
Để sử dụng NumPy arange()
, numpy
trước tiên bạn cần nhập :
>> >
>> >import numpy as np
Dưới đây là bảng với một vài ví dụ tóm tắt cách sử dụng NumPy arange()
. Có thể hữu ích nếu ghi nhớ các cách sử dụng:
Thí dụ | Kết quả |
---|---|
np.arange(start=1, stop=10, step=3) |
array([1, 4, 7]) |
np.arange(1, 10, 3) |
array([1, 4, 7]) |
np.arange(1, 10, 3, dtype=float) |
array([1., 4., 7.]) |
np.arange(1.0, 10, 3) |
array([1., 4., 7.]) |
np.arange(0, 1.1, 0.5) |
array([0., 0.5, 1. ]) |
np.arange(2, 6) |
array([2, 3, 4, 5]) |
np.arange(5) |
array([0, 1, 2, 3, 4]) |
np.arange(-8, -2, 2) |
array([-8, -6, -4]) |
np.arange(7, 0, -3) |
array([7, 4, 1]) |
np.arange(8, 2) |
array([]) |
Đừng quên rằng bạn cũng có thể ảnh hưởng đến bộ nhớ được sử dụng cho các mảng của mình bằng cách chỉ định kiểu NumPy với tham số dtype
.
Phần kết luận
Bây giờ bạn đã biết cách sử dụng NumPy arange()
. Hàm np.arange()
là một trong những quy trình cơ bản của NumPy thường được sử dụng để tạo các phiên bản của NumPy ndarray
. Nó có bốn đối số:
Xem thêm: Cách whitening hiệu quả cho mọi loại da
start
: giá trị đầu tiên của mảngstop
: nơi kết thúc mảngstep
: tăng hoặc giảmdtype
: kiểu của các phần tử của mảng
Bạn cũng đã học cách NumPy arange()
so sánh với lớp tích hợp sẵn trong Python range
khi bạn đang tạo chuỗi và tạo giá trị để lặp lại.
Bạn thấy rằng có những thói quen tạo mảng NumPy khác dựa trên dãy số, chẳng hạn như linspace()
, logspace()
, meshgrid()
, và vân vân.
Nếu bạn có vướng mắc hoặc quan điểm, xin vui mắt cho chúng vào phần phản hồi bên dưới.
Source: https://final-blade.com
Category: Kiến thức Internet