Lặp lại mảng NumPy
Lặp lại mảng
Lặp lại có nghĩa là duyệt qua từng phần tử một.
Khi xử lý mảng đa chiều ở dạng gọn gàng, chúng ta có thể thực hiện việc này bằng cách sử dụng vòng lặp for
cơ bản của python.
Nếu chúng ta lặp lại trên mảng 1-D, nó sẽ đi qua từng phần tử một.
Ví dụ
Lặp lại các phần tử của mảng 1-D sau:
import numpy as np
arr = np.array([1, 2, 3])
for x in arr:
print(x)
Hãy tự mình thử »Lặp lại mảng 2-D
Trong mảng 2-D, nó sẽ đi qua tất cả các hàng.
Ví dụ
Lặp lại các phần tử của mảng 2-D sau:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
for x
in arr:
print(x)
Hãy tự mình thử »Nếu chúng ta lặp lại trên một mảng n -D, nó sẽ đi qua từng chiều thứ n-1.
Để trả về các giá trị thực tế, các giá trị vô hướng, chúng ta phải lặp lại các mảng theo từng chiều.
Ví dụ
Lặp lại từng phần tử vô hướng của mảng 2-D:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
for x
in arr:
for y in x:
print(y)
Hãy tự mình thử » Lặp lại mảng 3-D
Trong mảng 3-D, nó sẽ đi qua tất cả các mảng 2-D.
Ví dụ
Lặp lại các phần tử của mảng 3-D sau:
import numpy as np
arr = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9],
[10, 11, 12]]])
for x
in arr:
print(x)
Hãy tự mình thử »Để trả về các giá trị thực tế, các giá trị vô hướng, chúng ta phải lặp lại các mảng theo từng chiều.
Ví dụ
Lặp lại các đại lượng vô hướng:
import numpy as np
arr = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9],
[10, 11, 12]]])
for x
in arr:
for y in x:
for z in y:
print(z)
Hãy tự mình thử »Lặp lại mảng bằng nditer()
Hàm nditer()
là một hàm trợ giúp có thể được sử dụng từ các lần lặp rất cơ bản đến rất nâng cao. Nó giải quyết một số vấn đề cơ bản mà chúng ta gặp phải trong quá trình lặp lại, hãy xem qua nó bằng các ví dụ.
Lặp lại trên mỗi phần tử vô hướng
Trong vòng lặp for
cơ bản, lặp qua từng đại lượng vô hướng của một mảng chúng ta cần sử dụng n vòng lặp for
, điều này có thể khó viết đối với các mảng có số chiều rất cao.
Ví dụ
Lặp lại qua mảng 3-D sau:
import numpy as np
arr = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
for x in np.nditer(arr):
print(x)
Hãy tự mình thử »Lặp lại mảng với các kiểu dữ liệu khác nhau
Chúng ta có thể sử dụng đối số op_dtypes
và chuyển cho nó kiểu dữ liệu dự kiến để thay đổi kiểu dữ liệu của các phần tử trong khi lặp.
NumPy không thay đổi kiểu dữ liệu của phần tử tại chỗ (trong đó phần tử nằm trong mảng) nên nó cần một số không gian khác để thực hiện hành động này, không gian thừa đó được gọi là bộ đệm và để kích hoạt nó trong nditer()
chúng ta vượt qua flags=['buffered']
.
Ví dụ
Lặp lại mảng dưới dạng một chuỗi:
import numpy as np
arr = np.array([1, 2, 3])
for x in
np.nditer(arr, flags=['buffered'], op_dtypes=['S']):
print(x)
Hãy tự mình thử »Lặp lại với kích thước bước khác nhau
Chúng ta có thể sử dụng tính năng lọc và theo sau là phép lặp.
Ví dụ
Lặp lại qua mọi phần tử vô hướng của mảng 2D bỏ qua 1 phần tử:
import numpy as np
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
for x in np.nditer(arr[:, ::2]):
print(x)
Hãy tự mình thử »Phép lặp liệt kê sử dụng ndenumerate()
Việc liệt kê có nghĩa là đề cập đến số thứ tự của từng thứ một.
Đôi khi chúng ta yêu cầu chỉ mục tương ứng của phần tử trong khi lặp, phương thức ndenumerate()
có thể được sử dụng cho các usecase đó.
Ví dụ
Liệt kê các phần tử mảng 1D sau:
import numpy as np
arr = np.array([1, 2, 3])
for idx, x in
np.ndenumerate(arr):
print(idx, x)
Hãy tự mình thử »Ví dụ
Liệt kê các phần tử của mảng 2D sau:
import numpy as np
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
for idx, x in np.ndenumerate(arr):
print(idx, x)
Hãy tự mình thử »