Mảng cốt truyện python so với chỉ mục
Bạn có thể nhận thấy rằng, trong một số trường hợp, các phần tử mảng được hiển thị bằng dấu chấm (e. g. >>> import numpy as np8 so với >>> import numpy as np9). Điều này là do sự khác biệt trong kiểu dữ liệu được sử dụng Show
In [1]: L = range(1000) In [2]: %timeit [i**2 for i in L] 1000 loops, best of 3: 403 us per loop In [3]: a = np.arange(1000) In [4]: %timeit a**2 100000 loops, best of 3: 12.7 us per loop2 Mẹo Các kiểu dữ liệu khác nhau cho phép chúng tôi lưu trữ dữ liệu gọn gàng hơn trong bộ nhớ, nhưng hầu hết thời gian chúng tôi chỉ làm việc với các số dấu phẩy động. Lưu ý rằng, trong ví dụ trên, NumPy tự động phát hiện kiểu dữ liệu từ đầu vào Bạn có thể chỉ định rõ ràng kiểu dữ liệu nào bạn muốn In [1]: L = range(1000) In [2]: %timeit [i**2 for i in L] 1000 loops, best of 3: 403 us per loop In [3]: a = np.arange(1000) In [4]: %timeit a**2 100000 loops, best of 3: 12.7 us per loop3 Kiểu dữ liệu mặc định là dấu phẩy động In [1]: L = range(1000) In [2]: %timeit [i**2 for i in L] 1000 loops, best of 3: 403 us per loop In [3]: a = np.arange(1000) In [4]: %timeit a**2 100000 loops, best of 3: 12.7 us per loop4 Ngoài ra còn có các loại khác Tổ hợpIn [1]: L = range(1000) In [2]: %timeit [i**2 for i in L] 1000 loops, best of 3: 403 us per loop In [3]: a = np.arange(1000) In [4]: %timeit a**2 100000 loops, best of 3: 12.7 us per loop5bool In [1]: L = range(1000) In [2]: %timeit [i**2 for i in L] 1000 loops, best of 3: 403 us per loop In [3]: a = np.arange(1000) In [4]: %timeit a**2 100000 loops, best of 3: 12.7 us per loop6Dây In [1]: L = range(1000) In [2]: %timeit [i**2 for i in L] 1000 loops, best of 3: 403 us per loop In [3]: a = np.arange(1000) In [4]: %timeit a**2 100000 loops, best of 3: 12.7 us per loop7Nhiều hơn nữa
1. 4. 1. 4. Trực quan hóa cơ bản¶Bây giờ chúng ta có các mảng dữ liệu đầu tiên, chúng ta sẽ trực quan hóa chúng Bắt đầu bằng cách khởi chạy IPython In [1]: L = range(1000) In [2]: %timeit [i**2 for i in L] 1000 loops, best of 3: 403 us per loop In [3]: a = np.arange(1000) In [4]: %timeit a**2 100000 loops, best of 3: 12.7 us per loop8 Hoặc cuốn sổ In [1]: L = range(1000) In [2]: %timeit [i**2 for i in L] 1000 loops, best of 3: 403 us per loop In [3]: a = np.arange(1000) In [4]: %timeit a**2 100000 loops, best of 3: 12.7 us per loop9 Khi IPython đã bắt đầu, hãy bật các ô tương tác >>> import numpy as np40 Hoặc, từ sổ ghi chép, bật các ô trong sổ ghi chép >>> import numpy as np41 >>> a = np.array([0, 1, 2, 3]) >>> a array([0, 1, 2, 3]) >>> a.ndim 1 >>> a.shape (4,) >>> len(a) 44 quan trọng đối với sổ ghi chép để các ô được hiển thị trong sổ ghi chép chứ không phải trong cửa sổ mới Matplotlib là gói vẽ đồ thị 2D. Chúng ta có thể nhập các chức năng của nó như dưới đây >>> import numpy as np42 Và sau đó sử dụng (lưu ý rằng bạn phải sử dụng rõ ràng >>> a = np.array([0, 1, 2, 3]) >>> a array([0, 1, 2, 3]) >>> a.ndim 1 >>> a.shape (4,) >>> len(a) 45 nếu bạn chưa bật biểu đồ tương tác với >>> a = np.array([0, 1, 2, 3]) >>> a array([0, 1, 2, 3]) >>> a.ndim 1 >>> a.shape (4,) >>> len(a) 46) >>> import numpy as np43 Hoặc, nếu bạn đã bật các ô tương tác với >>> a = np.array([0, 1, 2, 3]) >>> a array([0, 1, 2, 3]) >>> a.ndim 1 >>> a.shape (4,) >>> len(a) 46 >>> import numpy as np44
>>> import numpy as np45
>>> import numpy as np46 Xem thêm Thêm trong. chương matplotlib Tập thể dục. Trực quan hóa đơn giản
1. 4. 1. 5. Lập chỉ mục và cắt lát¶Các mục của một mảng có thể được truy cập và gán theo cùng một cách như các chuỗi Python khác (e. g. danh sách) >>> import numpy as np47 Cảnh báo Các chỉ số bắt đầu từ 0, giống như các chuỗi Python khác (và C/C++). Ngược lại, trong Fortran hoặc Matlab, các chỉ số bắt đầu từ 1 Thành ngữ python thông thường để đảo ngược trình tự được hỗ trợ >>> import numpy as np48 Đối với mảng nhiều chiều, chỉ số là bộ số nguyên >>> import numpy as np49 Ghi chú
cắt lát. Mảng, giống như các chuỗi Python khác, cũng có thể được cắt lát In [1]: L = range(1000) In [2]: %timeit [i**2 for i in L] 1000 loops, best of 3: 403 us per loop In [3]: a = np.arange(1000) In [4]: %timeit a**2 100000 loops, best of 3: 12.7 us per loop10 Lưu ý rằng chỉ mục cuối cùng không được bao gồm. In [1]: L = range(1000) In [2]: %timeit [i**2 for i in L] 1000 loops, best of 3: 403 us per loop In [3]: a = np.arange(1000) In [4]: %timeit a**2 100000 loops, best of 3: 12.7 us per loop11 Tất cả ba thành phần lát cắt đều không bắt buộc. theo mặc định, bắt đầu là 0, kết thúc là cuối cùng và bước là 1 In [1]: L = range(1000) In [2]: %timeit [i**2 for i in L] 1000 loops, best of 3: 403 us per loop In [3]: a = np.arange(1000) In [4]: %timeit a**2 100000 loops, best of 3: 12.7 us per loop12 Một bản tóm tắt minh họa nhỏ về lập chỉ mục và cắt NumPy… Bạn cũng có thể kết hợp gán và cắt In [1]: L = range(1000) In [2]: %timeit [i**2 for i in L] 1000 loops, best of 3: 403 us per loop In [3]: a = np.arange(1000) In [4]: %timeit a**2 100000 loops, best of 3: 12.7 us per loop13 Tập thể dục. Lập chỉ mục và cắt lát
Tập thể dục. Tạo mảng Tạo các mảng sau (với kiểu dữ liệu chính xác) In [1]: L = range(1000) In [2]: %timeit [i**2 for i in L] 1000 loops, best of 3: 403 us per loop In [3]: a = np.arange(1000) In [4]: %timeit a**2 100000 loops, best of 3: 12.7 us per loop15 mệnh trên khóa học. 3 tuyên bố cho mỗi Dấu. Các phần tử mảng riêng lẻ có thể được truy cập tương tự như một danh sách, e. g. In [1]: L = range(1000) In [2]: %timeit [i**2 for i in L] 1000 loops, best of 3: 403 us per loop In [3]: a = np.arange(1000) In [4]: %timeit a**2 100000 loops, best of 3: 12.7 us per loop04 hoặc In [1]: L = range(1000) In [2]: %timeit [i**2 for i in L] 1000 loops, best of 3: 403 us per loop In [3]: a = np.arange(1000) In [4]: %timeit a**2 100000 loops, best of 3: 12.7 us per loop05 Dấu. Kiểm tra chuỗi tài liệu cho >>> import numpy as np6 Tập thể dục. Ốp lát để tạo mảng Đọc lướt qua tài liệu về In [1]: L = range(1000) In [2]: %timeit [i**2 for i in L] 1000 loops, best of 3: 403 us per loop In [3]: a = np.arange(1000) In [4]: %timeit a**2 100000 loops, best of 3: 12.7 us per loop07 và sử dụng hàm này để xây dựng mảng In [1]: L = range(1000) In [2]: %timeit [i**2 for i in L] 1000 loops, best of 3: 403 us per loop In [3]: a = np.arange(1000) In [4]: %timeit a**2 100000 loops, best of 3: 12.7 us per loop16 1. 4. 1. 6. Bản sao và lượt xem¶Thao tác cắt lát tạo ra một khung nhìn trên mảng ban đầu, đây chỉ là một cách truy cập dữ liệu mảng. Do đó, mảng ban đầu không được sao chép trong bộ nhớ. Bạn có thể sử dụng In [1]: L = range(1000) In [2]: %timeit [i**2 for i in L] 1000 loops, best of 3: 403 us per loop In [3]: a = np.arange(1000) In [4]: %timeit a**2 100000 loops, best of 3: 12.7 us per loop08 để kiểm tra xem hai mảng có chia sẻ cùng một khối bộ nhớ không. Tuy nhiên, lưu ý rằng điều này sử dụng heuristic và có thể cung cấp cho bạn kết quả dương tính giả Khi sửa đổi chế độ xem, mảng ban đầu cũng được sửa đổi In [1]: L = range(1000) In [2]: %timeit [i**2 for i in L] 1000 loops, best of 3: 403 us per loop In [3]: a = np.arange(1000) In [4]: %timeit a**2 100000 loops, best of 3: 12.7 us per loop17 Hành vi này có thể gây ngạc nhiên ngay từ cái nhìn đầu tiên… nhưng nó cho phép tiết kiệm cả bộ nhớ và thời gian ví dụ làm việc. sàng số nguyên tố Tính toán các số nguyên tố trong 0–99, bằng một cái sàng
In [1]: L = range(1000) In [2]: %timeit [i**2 for i in L] 1000 loops, best of 3: 403 us per loop In [3]: a = np.arange(1000) In [4]: %timeit a**2 100000 loops, best of 3: 12.7 us per loop18
In [1]: L = range(1000) In [2]: %timeit [i**2 for i in L] 1000 loops, best of 3: 403 us per loop In [3]: a = np.arange(1000) In [4]: %timeit a**2 100000 loops, best of 3: 12.7 us per loop19
In [1]: L = range(1000) In [2]: %timeit [i**2 for i in L] 1000 loops, best of 3: 403 us per loop In [3]: a = np.arange(1000) In [4]: %timeit a**2 100000 loops, best of 3: 12.7 us per loop10
1. 4. 1. 7. Lập chỉ mục ưa thích¶Mẹo Các mảng NumPy có thể được lập chỉ mục bằng các lát cắt, nhưng cũng có thể bằng các mảng boolean hoặc số nguyên (mặt nạ). Phương pháp này được gọi là lập chỉ mục ưa thích. Nó tạo ra các bản sao không xem Sử dụng mặt nạ boolean¶In [1]: L = range(1000) In [2]: %timeit [i**2 for i in L] 1000 loops, best of 3: 403 us per loop In [3]: a = np.arange(1000) In [4]: %timeit a**2 100000 loops, best of 3: 12.7 us per loop11 Lập chỉ mục bằng mặt nạ có thể rất hữu ích để gán giá trị mới cho mảng con In [1]: L = range(1000) In [2]: %timeit [i**2 for i in L] 1000 loops, best of 3: 403 us per loop In [3]: a = np.arange(1000) In [4]: %timeit a**2 100000 loops, best of 3: 12.7 us per loop12 Lập chỉ mục với một mảng các số nguyên¶In [1]: L = range(1000) In [2]: %timeit [i**2 for i in L] 1000 loops, best of 3: 403 us per loop In [3]: a = np.arange(1000) In [4]: %timeit a**2 100000 loops, best of 3: 12.7 us per loop13 Lập chỉ mục có thể được thực hiện với một mảng các số nguyên, trong đó cùng một chỉ mục được lặp lại nhiều lần In [1]: L = range(1000) In [2]: %timeit [i**2 for i in L] 1000 loops, best of 3: 403 us per loop In [3]: a = np.arange(1000) In [4]: %timeit a**2 100000 loops, best of 3: 12.7 us per loop14 Giá trị mới có thể được chỉ định với loại lập chỉ mục này In [1]: L = range(1000) In [2]: %timeit [i**2 for i in L] 1000 loops, best of 3: 403 us per loop In [3]: a = np.arange(1000) In [4]: %timeit a**2 100000 loops, best of 3: 12.7 us per loop15 Mẹo Khi một mảng mới được tạo bằng cách lập chỉ mục với một mảng các số nguyên, mảng mới có hình dạng giống như mảng các số nguyên Tôi có thể vẽ một mảng trong Python không?Sử dụng matplotlib. pyplot. imshow(X) với X được đặt thành mảng 2d để vẽ mảng .
Chúng ta có thể sử dụng mảng làm chỉ mục trong Python không?Các phần tử trong mảng NumPy có thể được truy cập bằng cách lập chỉ mục. Lập chỉ mục là một thao tác lấy ra một tập hợp các giá trị đã chọn từ một mảng. Chỉ số của một giá trị trong một mảng là vị trí của giá trị đó trong mảng.
. Ghi đếm trong Python bắt đầu từ 0 và kết thúc tại n-1 Ưu điểm của mảng so với danh sách trong Python là gì?Lưu trữ kiểu dữ liệu. Mảng chỉ có thể lưu trữ các phần tử của một loại dữ liệu nhưng Danh sách cũng có thể lưu trữ các phần tử của các loại dữ liệu khác nhau . Do đó, Mảng lưu trữ các giá trị dữ liệu đồng nhất và danh sách có thể lưu trữ các giá trị dữ liệu không đồng nhất.
Mảng NumPy có tốt hơn danh sách không?Mảng NumPy nhanh hơn danh sách
. Theo dự đoán, chúng ta có thể thấy rằng mảng NumPy nhanh hơn đáng kể so với danh sách. Sự khác biệt đáng kể về tốc độ là đáng chú ý. |