Bạn có thể sử dụng cách cắt của numpy một cách đơn giản start:stop:step
.
>>> xs
array([1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4])
>>> xs[1::4]
array([2, 2, 2])
Điều này tạo ra một chế độ xem dữ liệu gốc, vì vậy nó là thời gian không đổi . Nó cũng sẽ phản ánh các thay đổi đối với mảng ban đầu và giữ toàn bộ mảng ban đầu trong bộ nhớ:
>>> a
array([1, 2, 3, 4, 5])
>>> b = a[::2] # O(1), constant time
>>> b[:] = 0 # modifying the view changes original array
>>> a # original array is modified
array([0, 2, 0, 4, 0])
vì vậy nếu một trong những điều trên là sự cố, bạn có thể tạo một bản sao rõ ràng:
>>> a
array([1, 2, 3, 4, 5])
>>> b = a[::2].copy() # explicit copy, O(n)
>>> b[:] = 0 # modifying the copy
>>> a # original is intact
array([1, 2, 3, 4, 5])
Đây không phải là thời gian cố định, nhưng kết quả không bị ràng buộc với mảng ban đầu. Bản sao cũng liền kề trong bộ nhớ, điều này có thể thực hiện một số thao tác trên đó nhanh hơn.