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
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
>>> a = np.array[[0, 1, 2, 3]] >>> a array[[0, 1, 2, 3]] >>> a.ndim 1 >>> a.shape [4,] >>> len[a] 4
0>>> a = np.array[[0, 1, 2, 3]] >>> a array[[0, 1, 2, 3]] >>> a.ndim 1 >>> a.shape [4,] >>> len[a] 4
1>>> a = np.array[[0, 1, 2, 3]] >>> a array[[0, 1, 2, 3]] >>> a.ndim 1 >>> a.shape [4,] >>> len[a] 4
2>>> a = np.array[[0, 1, 2, 3]] >>> a array[[0, 1, 2, 3]] >>> a.ndim 1 >>> a.shape [4,] >>> len[a] 4
3
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
- vẽ đồ thị 1D
>>> import numpy as np45
- Mảng 2D [chẳng hạn như hình ảnh]
>>> 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
- Vẽ một số mảng đơn giản. một cosin như một hàm của thời gian và ma trận 2D
- Hãy thử sử dụng bản đồ màu
>>> a = np.array[[0, 1, 2, 3]] >>> a array[[0, 1, 2, 3]] >>> a.ndim 1 >>> a.shape [4,] >>> len[a] 4
8 trên ma trận 2D
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ú
- Trong 2D, thứ nguyên đầu tiên tương ứng với hàng, thứ hai tương ứng với cột
- đối với
>>> a = np.array[[0, 1, 2, 3]] >>> a array[[0, 1, 2, 3]] >>> a.ndim 1 >>> a.shape [4,] >>> len[a] 4
9 đa chiều,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 loop
00 được diễn giải bằng cách lấy tất cả các phần tử trong các thứ nguyên không xác định
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
Hãy thử các hương vị cắt lát khác nhau, 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 loop
01,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 loop
02 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 loop
03. bắt đầu từ một linspace, cố gắng lấy các số lẻ đếm ngược và các số chẵn đếm ngượcTái tạo các lát cắt trong sơ đồ trên. Bạn có thể sử dụng biểu thức sau để tạo 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 loop
14
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
- Xây dựng một mảng hình [100,] 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 loop
09, được điền True ở đầu
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
- Gạch bỏ 0 và 1 không phải là số nguyên 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 loop19
- Đối với mỗi 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 loop
00 bắt đầu từ 2, hãy gạch bỏ các bội số cao hơn của 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 loop10
Đọc lướt qua
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 loop
01 và in các số nguyên tốTheo sát
- Di chuyển mã trên vào tệp script có tê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 loop
02 - Chạy nó để kiểm tra nó hoạt động
- Sử dụng tối ưu hóa được đề xuất trong sàng của Eratosthenes
- Bỏ qua
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 loop
00 đã được biết là không phải là số nguyên tố - Số đầu tiên bị gạch bỏ là
- Di chuyển mã trên vào tệp script có tên
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