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 np
8 so với
>>> import numpy as np
9]. Đ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 loop
2

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 loop
3

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 loop
4

Ngoài ra còn có các loại khác

Tổ hợp

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
5

bool

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
6

Dâ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 loop
7

Nhiề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 loop
8

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 loop
9

Khi IPython đã bắt đầu, hãy bật các ô tương tác

>>> import numpy as np
40

Hoặc, từ sổ ghi chép, bật các ô trong sổ ghi chép

>>> import numpy as np
41

>>> a = np.array[[0, 1, 2, 3]]
>>> a
array[[0, 1, 2, 3]]
>>> a.ndim
1
>>> a.shape
[4,]
>>> len[a]
4
4 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 np
42

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]
4
5 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]
4
6]

>>> import numpy as np
43

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]
4
6

>>> import numpy as np
44

  • vẽ đồ thị 1D

>>> import numpy as np
45

  • Mảng 2D [chẳng hạn như hình ảnh]

>>> import numpy as np
46

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 np
47

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 np
48

Đối với mảng nhiều chiều, chỉ số là bộ số nguyên

>>> import numpy as np
49

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 loop
10

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 loop
11

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 loop
12

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 loop
13

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ược

  • Tá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 loop
15

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 loop
04 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 loop
05

Dấu. Kiểm tra chuỗi tài liệu cho

>>> import numpy as np
6

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 loop
07 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 loop
16

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 loop
08 để 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 loop
17

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 loop
18

  • 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 loop
19

  • Đố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 loop
10

  • Đọ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

    1. 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ố
    2. Số đầu tiên bị gạch bỏ là

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 loop
11

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 loop
12

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 loop
13

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 loop
14

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 loop
15

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ú ý.

Chủ Đề