Hướng dẫn index of 2d array python - chỉ mục của python mảng 2d

Tôi cần tìm ra làm thế nào tôi có thể tìm thấy tất cả các chỉ mục của một giá trị trong một mảng 2D.

Show

Ví dụ: tôi có mảng 2D sau:

([[1 1 0 0],
  [0 0 1 1],
  [0 0 0 0]])

Tôi cần tìm chỉ số của tất cả các 1 và 0.

1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]

Tôi đã thử điều này nhưng nó không cung cấp cho tôi tất cả các chỉ mục:

t = [(index, row.index(1)) for index, row in enumerate(x) if 1 in row]

Về cơ bản, nó chỉ cung cấp cho tôi một trong các chỉ mục trong mỗi hàng

from array import *

T = [[11, 12, 5, 2], [15, 6,10], [10, 8, 12, 5], [12,15,8,6]]

print(T[0])

print(T[1][2])
8.


Mảng hai chiều là một mảng trong một mảng. Nó là một mảng các mảng. Trong loại mảng này, vị trí của một phần tử dữ liệu được giới thiệu bởi hai chỉ số thay vì một. Vì vậy, nó đại diện cho một bảng với các hàng một dcolumns dữ liệu.

Trong ví dụ dưới đây của một mảng hai chiều, người quan sát rằng mỗi phần tử mảng cũng là một mảng.

Hãy xem xét ví dụ về nhiệt độ ghi 4 lần một ngày, mỗi ngày. Đôi khi công cụ ghi âm có thể bị lỗi và chúng tôi không ghi dữ liệu. Dữ liệu như vậy trong 4 ngày có thể được trình bày dưới dạng mảng hai chiều như dưới đây.

Day 1 - 11 12 5 2 
Day 2 - 15 6 10 
Day 3 - 10 8 12 5 
Day 4 - 12 15 8 6 

Dữ liệu trên có thể được biểu diễn dưới dạng mảng hai chiều như dưới đây.

T = [[11, 12, 5, 2], [15, 6,10], [10, 8, 12, 5], [12,15,8,6]]

Truy cập các giá trị

Các yếu tố dữ liệu trong hai mảng dimesnional có thể được truy cập bằng hai chỉ số. Một chỉ mục đề cập đến mảng chính hoặc cha mẹ và một chỉ mục khác đề cập đến vị trí của phần tử dữ liệu trong mảng bên trong. Nếu chúng tôi chỉ đề cập đến một chỉ mục thì toàn bộ mảng bên trong được in cho vị trí chỉ mục đó.

Thí dụ

Ví dụ dưới đây minh họa cách nó hoạt động.

from array import *

T = [[11, 12, 5, 2], [15, 6,10], [10, 8, 12, 5], [12,15,8,6]]

print(T[0])

print(T[1][2])

Đầu ra

Khi mã trên được thực thi, nó sẽ tạo ra kết quả sau -

[11, 12, 5, 2]
10

Để in ra toàn bộ mảng hai chiều, chúng ta có thể sử dụng Python cho vòng lặp như hình dưới đây. Chúng tôi sử dụng cuối dòng để in ra các giá trị trong các hàng khác nhau.

Thí dụ

from array import *

T = [[11, 12, 5, 2], [15, 6,10], [10, 8, 12, 5], [12,15,8,6]]
for r in T:
   for c in r:
      print(c,end = " ")
   print()

Đầu ra

Khi mã trên được thực thi, nó sẽ tạo ra kết quả sau -

11 12  5 2 
15  6 10 
10  8 12 5 
12 15  8 6 

Để in ra toàn bộ mảng hai chiều, chúng ta có thể sử dụng Python cho vòng lặp như hình dưới đây. Chúng tôi sử dụng cuối dòng để in ra các giá trị trong các hàng khác nhau.

Chúng ta có thể chèn các phần tử dữ liệu mới ở vị trí cụ thể bằng cách sử dụng phương thức chèn () và chỉ định chỉ mục.

Thí dụ

Trong ví dụ dưới đây, một phần tử dữ liệu mới được chèn tại vị trí chỉ mục 2.

from array import *
T = [[11, 12, 5, 2], [15, 6,10], [10, 8, 12, 5], [12,15,8,6]]

T.insert(2, [0,5,11,13,6])

for r in T:
   for c in r:
      print(c,end = " ")
   print()

Đầu ra

Khi mã trên được thực thi, nó sẽ tạo ra kết quả sau -

1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
0

Cập nhật giá trị

Chúng ta có thể cập nhật toàn bộ mảng bên trong hoặc một số phần tử dữ liệu cụ thể của mảng bên trong bằng cách chỉ định lại các giá trị bằng chỉ mục mảng.

Thí dụ

1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
1

Đầu ra

Khi mã trên được thực thi, nó sẽ tạo ra kết quả sau -

1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
2

Cập nhật giá trị

Chúng ta có thể cập nhật toàn bộ mảng bên trong hoặc một số phần tử dữ liệu cụ thể của mảng bên trong bằng cách chỉ định lại các giá trị bằng chỉ mục mảng.

Thí dụ

1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
3

Đầu ra

Khi mã trên được thực thi, nó sẽ tạo ra kết quả sau -

1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
4

from array import *

T = [[11, 12, 5, 2], [15, 6,10], [10, 8, 12, 5], [12,15,8,6]]

print(T[0])

print(T[1][2])
9 có thể được lập chỉ mục bằng cú pháp Python
[11, 12, 5, 2]
10
0 tiêu chuẩn, trong đó X là mảng và obj lựa chọn. Có nhiều loại lập chỉ mục khác nhau có sẵn tùy thuộc vào OBJ: lập chỉ mục cơ bản, lập chỉ mục nâng cao và truy cập hiện trường.

Hầu hết các ví dụ sau đây cho thấy việc sử dụng lập chỉ mục khi tham chiếu dữ liệu trong một mảng. Các ví dụ cũng hoạt động tốt khi gán cho một mảng. Xem gán giá trị cho các mảng được lập chỉ mục cho các ví dụ và giải thích cụ thể về cách thức hoạt động của bài tập.Assigning values to indexed arrays for specific examples and explanations on how assignments work.

Lưu ý rằng trong Python,

[11, 12, 5, 2]
10
1 tương đương với
[11, 12, 5, 2]
10
2; Cái sau chỉ là đường cú pháp cho cái trước.

Lập chỉ mục cơ bản#

Lập chỉ mục phần tử đơn#

Lập chỉ mục phần tử duy nhất hoạt động chính xác như thế đối với các chuỗi Python tiêu chuẩn khác. Đó là dựa trên 0 và chấp nhận các chỉ số tiêu cực để lập chỉ mục từ cuối mảng.

1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
5

Không cần thiết phải tách từng chỉ số kích thước trên các dấu ngoặc vuông của riêng mình.

1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
6

Lưu ý rằng nếu một người lập chỉ mục một mảng đa chiều với ít chỉ số hơn kích thước, người ta sẽ nhận được một mảng hai chiều. Ví dụ:

1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
7

Nghĩa là, mỗi chỉ mục được chỉ định chọn mảng tương ứng với phần còn lại của các kích thước được chọn. Trong ví dụ trên, việc chọn 0 có nghĩa là kích thước còn lại của chiều dài 5 không được xác định và những gì được trả về là một mảng có kích thước và kích thước đó. Cần lưu ý rằng mảng được trả về là một chế độ xem, tức là, nó không phải là bản sao của bản gốc, mà chỉ vào cùng các giá trị trong bộ nhớ cũng như mảng gốc. Trong trường hợp này, mảng 1-D ở vị trí đầu tiên (0) được trả về. Vì vậy, sử dụng một chỉ mục duy nhất trên mảng được trả về, kết quả là một phần tử được trả về. Đó là:view, i.e., it is not a copy of the original, but points to the same values in memory as does the original array. In this case, the 1-D array at the first position (0) is returned. So using a single index on the returned array, results in a single element being returned. That is:

Vì vậy, lưu ý rằng

[11, 12, 5, 2]
10
3 mặc dù trường hợp thứ hai không hiệu quả hơn khi một mảng tạm thời mới được tạo sau chỉ số đầu tiên sau đó được lập chỉ mục bởi 2.

Ghi chú

Numpy sử dụng lập chỉ mục thứ tự C. Điều đó có nghĩa là chỉ số cuối cùng thường đại diện cho vị trí bộ nhớ thay đổi nhanh nhất, không giống như Fortran hoặc IDL, trong đó chỉ số đầu tiên thể hiện vị trí thay đổi nhanh nhất trong bộ nhớ. Sự khác biệt này đại diện cho một tiềm năng lớn cho sự nhầm lẫn.

Cắt và sải#

Việc cắt cơ bản mở rộng khái niệm cơ bản của Python về việc cắt thành kích thước N. Việc cắt cơ bản xảy ra khi OBJ là đối tượng

[11, 12, 5, 2]
10
4 (được xây dựng bởi ký hiệu
[11, 12, 5, 2]
10
5 bên trong dấu ngoặc), một số nguyên hoặc một bộ đồ của các đối tượng và số nguyên. Các đối tượng
[11, 12, 5, 2]
10
6 và
[11, 12, 5, 2]
10
7 cũng có thể được xen kẽ với những đối tượng này.

Trường hợp đơn giản nhất của việc lập chỉ mục với N số nguyên trả về một vô hướng mảng đại diện cho mục tương ứng. Như trong Python, tất cả các chỉ số đều dựa trên 0: Đối với chỉ mục thứ i \ (n_i \), phạm vi hợp lệ là \ (0 \ le n_i array scalar representing the corresponding item. As in Python, all indices are zero-based: for the i-th index \(n_i\), the valid range is \(0 \le n_i < d_i\) where \(d_i\) is the i-th element of the shape of the array. Negative indices are interpreted as counting from the end of the array (i.e., if \(n_i < 0\), it means \(n_i + d_i\)).

Tất cả các mảng được tạo bằng cách cắt cơ bản luôn là chế độ xem của mảng gốc.views of the original array.

Ghi chú

Numpy sử dụng lập chỉ mục thứ tự C. Điều đó có nghĩa là chỉ số cuối cùng thường đại diện cho vị trí bộ nhớ thay đổi nhanh nhất, không giống như Fortran hoặc IDL, trong đó chỉ số đầu tiên thể hiện vị trí thay đổi nhanh nhất trong bộ nhớ. Sự khác biệt này đại diện cho một tiềm năng lớn cho sự nhầm lẫn.view instead of a copy as in the case of built-in Python sequences such as string, tuple and list. Care must be taken when extracting a small portion from a large array which becomes useless after the extraction, because the small portion extracted contains a reference to the large original array whose memory will not be released until all arrays derived from it are garbage-collected. In such cases an explicit

[11, 12, 5, 2]
10
8 is recommended.

Các quy tắc tiêu chuẩn về cắt trình tự áp dụng cho việc cắt cơ bản trên cơ sở mỗi chiều (bao gồm cả việc sử dụng chỉ số bước). Một số khái niệm hữu ích cần nhớ bao gồm:

  • Cú pháp lát cơ bản là

    [11, 12, 5, 2]
    10
    
    9 trong đó tôi là chỉ số bắt đầu, j là chỉ số dừng và k là bước (\ (k \ neq0 \)). Điều này chọn các phần tử m (theo kích thước tương ứng) với các giá trị chỉ mục i, i + k, triệt, i + (m - 1) k trong đó \ (m = q + (r \ neq0) \) và q và r là chỉ số và phần còn lại có được bằng cách chia j - i cho k: j - i = q k + r, sao cho i + (m - 1) k \(k\neq0\)). This selects the m elements (in the corresponding dimension) with index values i, i + k, …, i + (m - 1) k where \(m = q + (r\neq0)\) and q and r are the quotient and remainder obtained by dividing j - i by k: j - i = q k + r, so that i + (m - 1) k < j. For example:

    1: [(0, 0), (0, 1), (1, 2), (1, 3)]
    0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
    
    8

  • I và J âm được hiểu là N + I và N + J trong đó n là số phần tử trong kích thước tương ứng. Tiêu cực k làm cho bước đi về phía các chỉ số nhỏ hơn. Từ ví dụ trên:

    1: [(0, 0), (0, 1), (1, 2), (1, 3)]
    0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
    
    9

  • Tất cả các mảng được tạo bằng cách cắt cơ bản luôn là chế độ xem của mảng gốc.

    t = [(index, row.index(1)) for index, row in enumerate(x) if 1 in row]
    
    0

  • Nếu số lượng đối tượng trong Tuple lựa chọn nhỏ hơn N, thì

    from array import *
    
    T = [[11, 12, 5, 2], [15, 6,10], [10, 8, 12, 5], [12,15,8,6]]
    for r in T:
       for c in r:
          print(c,end = " ")
       print()
    
    1 được giả định cho bất kỳ kích thước tiếp theo nào. Ví dụ:

    t = [(index, row.index(1)) for index, row in enumerate(x) if 1 in row]
    
    1

  • Một số nguyên, i, trả về các giá trị giống như

    from array import *
    
    T = [[11, 12, 5, 2], [15, 6,10], [10, 8, 12, 5], [12,15,8,6]]
    for r in T:
       for c in r:
          print(c,end = " ")
       print()
    
    3 ngoại trừ tính chiều của đối tượng được trả về bị giảm 1. Đặc biệt, một lựa chọn với phần tử p-th một số nguyên (và tất cả các mục khác
    from array import *
    
    T = [[11, 12, 5, 2], [15, 6,10], [10, 8, 12, 5], [12,15,8,6]]
    for r in T:
       for c in r:
          print(c,end = " ")
       print()
    
    1) trả về với kích thước n - 1. nếu n = 1 thì đối tượng được trả về là một vô hướng mảng. Những đối tượng này được giải thích trong vô hướng.except the dimensionality of the returned object is reduced by 1. In particular, a selection tuple with the p-th element an integer (and all other entries
    from array import *
    
    T = [[11, 12, 5, 2], [15, 6,10], [10, 8, 12, 5], [12,15,8,6]]
    for r in T:
       for c in r:
          print(c,end = " ")
       print()
    
    1) returns the corresponding sub-array with dimension N - 1. If N = 1 then the returned object is an array scalar. These objects are explained in Scalars.

  • Nếu bộ lựa chọn có tất cả các mục

    from array import *
    
    T = [[11, 12, 5, 2], [15, 6,10], [10, 8, 12, 5], [12,15,8,6]]
    for r in T:
       for c in r:
          print(c,end = " ")
       print()
    
    1 ngoại trừ mục nhập p-th là đối tượng lát cắt
    [11, 12, 5, 2]
    10
    
    9, thì mảng được trả về có kích thước n được hình thành bằng cách kết hợp các mép con được trả về bằng cách lập chỉ mục số nguyên của các phần tử I, I+K, + (m - 1) k
  • Việc cắt cơ bản với nhiều hơn một mục không phải là không phải . Do đó,

    11 12  5 2 
    15  6 10 
    10  8 12 5 
    12 15  8 6 
    
    2 hoạt động như
    11 12  5 2 
    15  6 10 
    10  8 12 5 
    12 15  8 6 
    
    3 dưới sự cắt cơ bản.

    Cảnh báo

    Trên đây không đúng cho việc lập chỉ mục nâng cao.not true for advanced indexing.

  • Bạn có thể sử dụng cắt để đặt các giá trị trong mảng, nhưng (không giống như danh sách) bạn không bao giờ có thể phát triển mảng. Kích thước của giá trị được đặt trong

    11 12  5 2 
    15  6 10 
    10  8 12 5 
    12 15  8 6 
    
    4 phải được (có thể phát sóng) hình dạng giống như
    [11, 12, 5, 2]
    10
    
    0.

  • Một tuple cắt luôn có thể được xây dựng dưới dạng OBJ và được sử dụng trong ký hiệu

    [11, 12, 5, 2]
    10
    
    0. Các đối tượng lát cắt có thể được sử dụng trong việc xây dựng thay cho ký hiệu
    11 12  5 2 
    15  6 10 
    10  8 12 5 
    12 15  8 6 
    
    7. Ví dụ,
    11 12  5 2 
    15  6 10 
    10  8 12 5 
    12 15  8 6 
    
    8 cũng có thể được thực hiện là
    11 12  5 2 
    15  6 10 
    10  8 12 5 
    12 15  8 6 
    
    9. Điều này có thể hữu ích để xây dựng mã chung hoạt động trên các mảng có kích thước tùy ý. Xem xử lý số lượng thay đổi của các chỉ số trong các chương trình để biết thêm thông tin.Dealing with variable numbers of indices within programs for more information.

Công cụ lập chỉ mục thứ nguyên#

Có một số công cụ để tạo điều kiện cho việc khớp dễ dàng các hình dạng mảng với các biểu thức và trong các bài tập.

[11, 12, 5, 2]
10
6 mở rộng đến số lượng đối tượng
from array import *

T = [[11, 12, 5, 2], [15, 6,10], [10, 8, 12, 5], [12,15,8,6]]
for r in T:
   for c in r:
      print(c,end = " ")
   print()
1 cần thiết cho bộ phận lựa chọn để lập chỉ mục tất cả các kích thước. Trong hầu hết các trường hợp, điều này có nghĩa là độ dài của bộ giảm chọn lựa chọn mở rộng là
from array import *
T = [[11, 12, 5, 2], [15, 6,10], [10, 8, 12, 5], [12,15,8,6]]

T.insert(2, [0,5,11,13,6])

for r in T:
   for c in r:
      print(c,end = " ")
   print()
2. Chỉ có thể có một dấu chấm lửng duy nhất. Từ ví dụ trên:

t = [(index, row.index(1)) for index, row in enumerate(x) if 1 in row]
2

Điều này tương đương với:

t = [(index, row.index(1)) for index, row in enumerate(x) if 1 in row]
3

Mỗi đối tượng

[11, 12, 5, 2]
10
7 trong Tuple lựa chọn phục vụ để mở rộng kích thước của lựa chọn kết quả theo một kích thước một đơn vị. Kích thước được thêm vào là vị trí của đối tượng
[11, 12, 5, 2]
10
7 trong bộ phận chọn.
[11, 12, 5, 2]
10
7 là bí danh cho
from array import *
T = [[11, 12, 5, 2], [15, 6,10], [10, 8, 12, 5], [12,15,8,6]]

T.insert(2, [0,5,11,13,6])

for r in T:
   for c in r:
      print(c,end = " ")
   print()
6 và
from array import *
T = [[11, 12, 5, 2], [15, 6,10], [10, 8, 12, 5], [12,15,8,6]]

T.insert(2, [0,5,11,13,6])

for r in T:
   for c in r:
      print(c,end = " ")
   print()
6 có thể được sử dụng thay cho điều này với kết quả tương tự. Từ ví dụ trên:

t = [(index, row.index(1)) for index, row in enumerate(x) if 1 in row]
4

Điều này có thể tiện dụng để kết hợp hai mảng theo cách mà nếu không sẽ yêu cầu các hoạt động định hình lại rõ ràng. Ví dụ:

t = [(index, row.index(1)) for index, row in enumerate(x) if 1 in row]
5

Lập chỉ mục nâng cao#

Lập chỉ mục nâng cao được kích hoạt khi đối tượng lựa chọn, OBJ, là một đối tượng chuỗi không phải là tuple,

from array import *
T = [[11, 12, 5, 2], [15, 6,10], [10, 8, 12, 5], [12,15,8,6]]

T.insert(2, [0,5,11,13,6])

for r in T:
   for c in r:
      print(c,end = " ")
   print()
8 (của số nguyên kiểu dữ liệu hoặc bool) hoặc một tuple có ít nhất một đối tượng chuỗi hoặc ndarray (của số nguyên loại dữ liệu hoặc bool). Có hai loại lập chỉ mục nâng cao: Số nguyên và Boolean.

Lập chỉ mục nâng cao luôn trả về một bản sao của dữ liệu (tương phản với việc cắt cơ bản trả về chế độ xem).view).

Cảnh báo

Trên đây không đúng cho việc lập chỉ mục nâng cao.

Cũng nhận ra rằng

1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
02 sẽ kích hoạt lập chỉ mục nâng cao, trong khi do khả năng tương thích số không dùng được đề cập ở trên,
1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
03 sẽ kích hoạt cắt cơ bản.

Chỉ mục mảng số nguyên#

Lập chỉ mục mảng số nguyên cho phép lựa chọn các mục tùy ý trong mảng dựa trên chỉ mục N chiều của chúng. Mỗi mảng số nguyên đại diện cho một số chỉ số vào kích thước đó.

Các giá trị âm được cho phép trong các mảng chỉ mục và hoạt động như chúng với các chỉ số hoặc lát cắt đơn:

t = [(index, row.index(1)) for index, row in enumerate(x) if 1 in row]
6

Nếu các giá trị chỉ mục nằm ngoài giới hạn thì

1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
04 sẽ bị ném:

t = [(index, row.index(1)) for index, row in enumerate(x) if 1 in row]
7

Khi chỉ số bao gồm nhiều mảng số nguyên như kích thước của mảng được lập chỉ mục, việc lập chỉ mục rất đơn giản, nhưng khác với việc cắt.

Các chỉ số nâng cao luôn được phát và lặp lại như một:broadcast and iterated as one:

t = [(index, row.index(1)) for index, row in enumerate(x) if 1 in row]
8

Lưu ý rằng hình dạng kết quả giống hệt với hình dạng mảng (phát) (phát sóng)

1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
05. Nếu các chỉ số không thể được phát theo cùng một hình dạng, một ngoại lệ
1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
06 sẽ được nâng lên.

Lập chỉ mục với các mảng chỉ số đa chiều có xu hướng sử dụng bất thường hơn, nhưng chúng được phép và chúng hữu ích cho một số vấn đề. Chúng tôi sẽ bắt đầu với trường hợp đa chiều đơn giản nhất:

t = [(index, row.index(1)) for index, row in enumerate(x) if 1 in row]
9

Trong trường hợp này, nếu các mảng chỉ mục có hình dạng phù hợp và có một mảng chỉ mục cho mỗi chiều của mảng được lập chỉ mục, mảng kết quả có hình dạng giống như các mảng chỉ mục và các giá trị tương ứng với chỉ số cho mỗi Vị trí trong các mảng chỉ mục. Trong ví dụ này, giá trị chỉ mục đầu tiên là 0 cho cả hai mảng chỉ mục và do đó giá trị đầu tiên của mảng kết quả là

1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
07. Giá trị tiếp theo là
1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
08 và cuối cùng là
1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
09.

Nếu các mảng chỉ mục không có hình dạng giống nhau, có một nỗ lực để phát chúng đến cùng một hình dạng. Nếu chúng không thể được phát theo cùng một hình dạng, một ngoại lệ sẽ được nâng lên:

Day 1 - 11 12 5 2 
Day 2 - 15 6 10 
Day 3 - 10 8 12 5 
Day 4 - 12 15 8 6 
0

Cơ chế phát sóng cho phép các mảng chỉ số được kết hợp với vô hướng cho các chỉ số khác. Hiệu ứng là giá trị vô hướng được sử dụng cho tất cả các giá trị tương ứng của các mảng chỉ mục:

Day 1 - 11 12 5 2 
Day 2 - 15 6 10 
Day 3 - 10 8 12 5 
Day 4 - 12 15 8 6 
1

Nhảy lên cấp độ phức tạp tiếp theo, chỉ có thể chỉ một phần một mảng với các mảng chỉ mục. Phải mất một chút suy nghĩ để hiểu những gì xảy ra trong những trường hợp như vậy. Ví dụ: nếu chúng ta chỉ sử dụng một mảng chỉ mục với Y:

Day 1 - 11 12 5 2 
Day 2 - 15 6 10 
Day 3 - 10 8 12 5 
Day 4 - 12 15 8 6 
2

Nó dẫn đến việc xây dựng một mảng mới trong đó mỗi giá trị của mảng chỉ mục chọn một hàng từ mảng được lập chỉ mục và mảng kết quả có hình dạng kết quả (số phần tử chỉ mục, kích thước của hàng).

Nói chung, hình dạng của mảng kết quả sẽ là sự kết hợp của hình dạng của mảng chỉ mục (hoặc hình dạng mà tất cả các mảng chỉ mục được phát) với hình dạng của bất kỳ kích thước không sử dụng nào (những thứ không được lập chỉ mục) trong mảng được lập chỉ mục .

Thí dụ

Từ mỗi hàng, một yếu tố cụ thể nên được chọn. Chỉ mục hàng chỉ là

1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
10 và chỉ mục cột chỉ định phần tử để chọn cho hàng tương ứng, ở đây
1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
11. Sử dụng cả hai cùng nhau, nhiệm vụ có thể được giải quyết bằng cách sử dụng lập chỉ mục nâng cao:

Day 1 - 11 12 5 2 
Day 2 - 15 6 10 
Day 3 - 10 8 12 5 
Day 4 - 12 15 8 6 
3

Để đạt được một hành vi tương tự như cắt cơ bản ở trên, việc phát sóng có thể được sử dụng. Hàm

1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
12 có thể giúp phát sóng này. Điều này được hiểu rõ nhất với một ví dụ.

Thí dụ

Từ mỗi hàng, một yếu tố cụ thể nên được chọn. Chỉ mục hàng chỉ là

1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
10 và chỉ mục cột chỉ định phần tử để chọn cho hàng tương ứng, ở đây
1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
11. Sử dụng cả hai cùng nhau, nhiệm vụ có thể được giải quyết bằng cách sử dụng lập chỉ mục nâng cao:

Day 1 - 11 12 5 2 
Day 2 - 15 6 10 
Day 3 - 10 8 12 5 
Day 4 - 12 15 8 6 
4

Để đạt được một hành vi tương tự như cắt cơ bản ở trên, việc phát sóng có thể được sử dụng. Hàm

1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
12 có thể giúp phát sóng này. Điều này được hiểu rõ nhất với một ví dụ.

Day 1 - 11 12 5 2 
Day 2 - 15 6 10 
Day 3 - 10 8 12 5 
Day 4 - 12 15 8 6 
5

Từ một mảng 4x3, các phần tử góc nên được chọn bằng cách sử dụng lập chỉ mục nâng cao. Do đó, tất cả các phần tử mà cột là một trong

1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
13 và hàng là một trong số
1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
14 cần được chọn. Để sử dụng lập chỉ mục nâng cao, người ta cần chọn tất cả các yếu tố một cách rõ ràng. Sử dụng phương thức được giải thích trước đây người ta có thể viết:

Day 1 - 11 12 5 2 
Day 2 - 15 6 10 
Day 3 - 10 8 12 5 
Day 4 - 12 15 8 6 
6

Tuy nhiên, vì các mảng lập chỉ mục ở trên chỉ lặp lại, việc phát sóng có thể được sử dụng (so sánh các hoạt động như

1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
15) để đơn giản hóa điều này:

Day 1 - 11 12 5 2 
Day 2 - 15 6 10 
Day 3 - 10 8 12 5 
Day 4 - 12 15 8 6 
7

Phát sóng này cũng có thể đạt được bằng cách sử dụng chức năng

1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
12:

Thí dụ

Từ mỗi hàng, một yếu tố cụ thể nên được chọn. Chỉ mục hàng chỉ là

1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
10 và chỉ mục cột chỉ định phần tử để chọn cho hàng tương ứng, ở đây
1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
11. Sử dụng cả hai cùng nhau, nhiệm vụ có thể được giải quyết bằng cách sử dụng lập chỉ mục nâng cao:

Để đạt được một hành vi tương tự như cắt cơ bản ở trên, việc phát sóng có thể được sử dụng. Hàm 1: [(0, 0), (0, 1), (1, 2), (1, 3)] 0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)] 12 có thể giúp phát sóng này. Điều này được hiểu rõ nhất với một ví dụ.

Từ một mảng 4x3, các phần tử góc nên được chọn bằng cách sử dụng lập chỉ mục nâng cao. Do đó, tất cả các phần tử mà cột là một trong

1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
13 và hàng là một trong số
1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
14 cần được chọn. Để sử dụng lập chỉ mục nâng cao, người ta cần chọn tất cả các yếu tố một cách rõ ràng. Sử dụng phương thức được giải thích trước đây người ta có thể viết:

Nếu

1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
23,
[11, 12, 5, 2]
10
0 trả về một mảng 1 chiều chứa đầy các phần tử của X tương ứng với các giá trị
1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
21 của OBJ. Thứ tự tìm kiếm sẽ là Major, kiểu C. Nếu OBJ có các giá trị
1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
21 tại các mục nằm ngoài giới hạn của X, thì lỗi chỉ mục sẽ được nêu ra. Nếu OBJ nhỏ hơn x, nó giống hệt nhau để điền vào nó bằng
1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
27.row-major, C-style. If obj has
1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
21 values at entries that are outside of the bounds of x, then an index error will be raised. If obj is smaller than x it is identical to filling it with
1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
27.

Một trường hợp sử dụng phổ biến cho điều này là lọc cho các giá trị phần tử mong muốn. Ví dụ: người ta có thể muốn chọn tất cả các mục từ một mảng không phải là

1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
28:

Day 1 - 11 12 5 2 
Day 2 - 15 6 10 
Day 3 - 10 8 12 5 
Day 4 - 12 15 8 6 
8

Hoặc muốn thêm một hằng số cho tất cả các yếu tố tiêu cực:

Day 1 - 11 12 5 2 
Day 2 - 15 6 10 
Day 3 - 10 8 12 5 
Day 4 - 12 15 8 6 
9

Nói chung nếu một chỉ số bao gồm một mảng boolean, kết quả sẽ giống hệt với việc chèn

1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
19 vào cùng một vị trí và sử dụng cơ chế lập chỉ mục mảng số nguyên được mô tả ở trên.
1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
30 tương đương với
1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
31.

Nếu chỉ có một mảng boolean và không có mảng lập chỉ số số nguyên thì điều này rất đơn giản. Chỉ cần cẩn thận để đảm bảo rằng chỉ số Boolean có chính xác nhiều kích thước như nó được cho là hoạt động.

Nói chung, khi mảng boolean có ít kích thước hơn mảng được lập chỉ mục, điều này tương đương với

1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
32, có nghĩa là x được lập chỉ mục bởi B theo sau bởi nhiều
from array import *

T = [[11, 12, 5, 2], [15, 6,10], [10, 8, 12, 5], [12,15,8,6]]
for r in T:
   for c in r:
      print(c,end = " ")
   print()
1 cần thiết để điền vào thứ hạng của x. Do đó, hình dạng của kết quả là một chiều chứa số lượng các phần tử thực của mảng boolean, theo sau là các kích thước còn lại của mảng được lập chỉ mục:

T = [[11, 12, 5, 2], [15, 6,10], [10, 8, 12, 5], [12,15,8,6]]
0

Ở đây, các hàng thứ 4 và 5 được chọn từ mảng được lập chỉ mục và kết hợp để tạo ra một mảng 2 chiều.

Thí dụ

Từ một mảng, chọn tất cả các hàng tổng hợp hơn hoặc bằng hai:

T = [[11, 12, 5, 2], [15, 6,10], [10, 8, 12, 5], [12,15,8,6]]
1

Kết hợp nhiều mảng lập chỉ mục boolean hoặc boolean với một mảng lập chỉ số số nguyên có thể được hiểu rõ nhất với sự tương tự

1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
19. Chức năng
1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
12 cũng hỗ trợ các mảng Boolean và sẽ hoạt động mà không có bất ngờ.

Thí dụ

Từ một mảng, chọn tất cả các hàng tổng hợp hơn hoặc bằng hai:

T = [[11, 12, 5, 2], [15, 6,10], [10, 8, 12, 5], [12,15,8,6]]
2

Kết hợp nhiều mảng lập chỉ mục boolean hoặc boolean với một mảng lập chỉ số số nguyên có thể được hiểu rõ nhất với sự tương tự

1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
19. Chức năng
1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
12 cũng hỗ trợ các mảng Boolean và sẽ hoạt động mà không có bất ngờ.

Sử dụng lập chỉ mục Boolean để chọn tất cả các hàng thêm vào một số chẵn. Đồng thời các cột 0 và 2 nên được chọn với một chỉ mục số nguyên nâng cao. Sử dụng chức năng

1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
12 Điều này có thể được thực hiện với:

T = [[11, 12, 5, 2], [15, 6,10], [10, 8, 12, 5], [12,15,8,6]]
3

Thí dụ

Từ một mảng, chọn tất cả các hàng tổng hợp hơn hoặc bằng hai:

T = [[11, 12, 5, 2], [15, 6,10], [10, 8, 12, 5], [12,15,8,6]]
4

Kết hợp nhiều mảng lập chỉ mục boolean hoặc boolean với một mảng lập chỉ số số nguyên có thể được hiểu rõ nhất với sự tương tự 1: [(0, 0), (0, 1), (1, 2), (1, 3)] 0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)] 19. Chức năng 1: [(0, 0), (0, 1), (1, 2), (1, 3)] 0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)] 12 cũng hỗ trợ các mảng Boolean và sẽ hoạt động mà không có bất ngờ.

Sử dụng lập chỉ mục Boolean để chọn tất cả các hàng thêm vào một số chẵn. Đồng thời các cột 0 và 2 nên được chọn với một chỉ mục số nguyên nâng cao. Sử dụng chức năng

1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
12 Điều này có thể được thực hiện với:

Nếu không có cuộc gọi

1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
17, chỉ các phần tử chéo sẽ được chọn.

T = [[11, 12, 5, 2], [15, 6,10], [10, 8, 12, 5], [12,15,8,6]]
5

Hoặc không có

1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
17 (so sánh các ví dụ mảng số nguyên):

T = [[11, 12, 5, 2], [15, 6,10], [10, 8, 12, 5], [12,15,8,6]]
6

Sử dụng một mảng hình dạng boolean 2 chiều (2, 3) với bốn phần tử thực để chọn các hàng từ một mảng hình dạng 3 chiều (2, 3, 5) dẫn đến kết quả 2 chiều của hình dạng (4, 5) :

T = [[11, 12, 5, 2], [15, 6,10], [10, 8, 12, 5], [12,15,8,6]]
7

Kết hợp lập chỉ mục nâng cao và cơ bản#

  • Khi có ít nhất một lát (

    from array import *
    
    T = [[11, 12, 5, 2], [15, 6,10], [10, 8, 12, 5], [12,15,8,6]]
    for r in T:
       for c in r:
          print(c,end = " ")
       print()
    
    1), Ellipsis (
    1: [(0, 0), (0, 1), (1, 2), (1, 3)]
    0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
    
    40) hoặc
    [11, 12, 5, 2]
    10
    
    7 trong chỉ mục (hoặc mảng có nhiều kích thước hơn là có các chỉ số nâng cao), thì hành vi này có thể phức tạp hơn. Nó giống như kết hợp kết quả lập chỉ mục cho từng phần tử chỉ số nâng cao.

  • Trong trường hợp đơn giản nhất, chỉ có một chỉ mục nâng cao duy nhất kết hợp với một lát cắt. Ví dụ:

Trong thực tế, hoạt động mảng lát và chỉ số là độc lập. Hoạt động lát cắt trích xuất các cột có chỉ số 1 và 2, (nghĩa là cột thứ 2 và 3), tiếp theo là hoạt động mảng chỉ mục trích xuất các hàng có chỉ mục 0, 2 và 4 (tức là các hàng thứ nhất, thứ ba và thứ năm). Điều này tương đương với:

Thí dụ

Từ một mảng, chọn tất cả các hàng tổng hợp hơn hoặc bằng hai:

Thí dụ

Đặt

1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
48 là (10, 20, 30, 40, 50) và giả sử
1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
55 và
1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
56 có thể được phát ra hình dạng (2, 3, 4). Sau đó,
1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
57 có hình dạng (10, 2, 3, 4, 40, 50) vì không gian con (20, 30) từ X đã được thay thế bằng không gian con (2, 3, 4) từ các chỉ số. Tuy nhiên,
1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
58 có hình dạng (2, 3, 4, 10, 30, 50) vì không có nơi nào không rõ ràng để thả trong không gian con lập chỉ mục, do đó nó được giải quyết đến đầu. Luôn luôn có thể sử dụng
1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
59 để di chuyển không gian con ở bất cứ nơi nào mong muốn. Lưu ý rằng ví dụ này không thể được nhân rộng bằng cách sử dụng
1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
60.

Thí dụ

Cắt lát có thể được kết hợp với các chỉ số boolean được phát sóng:

T = [[11, 12, 5, 2], [15, 6,10], [10, 8, 12, 5], [12,15,8,6]]
8

Truy cập trường#

Nếu đối tượng

from array import *
T = [[11, 12, 5, 2], [15, 6,10], [10, 8, 12, 5], [12,15,8,6]]

T.insert(2, [0,5,11,13,6])

for r in T:
   for c in r:
      print(c,end = " ")
   print()
8 là một mảng có cấu trúc, các trường của mảng có thể được truy cập bằng cách lập chỉ mục cho mảng với các chuỗi, giống như từ điển.fields of the array can be accessed by indexing the array with strings, dictionary-like.

Lập chỉ mục

1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
62 trả về một chế độ xem mới cho mảng, có hình dạng giống như X (ngoại trừ khi trường là một mảng phụ) nhưng loại dữ liệu
1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
63 và chỉ chứa một phần của dữ liệu trong trường được chỉ định. Ngoài ra, Record Array Scalar có thể được lập chỉ mục theo cách này.view to the array, which is of the same shape as x (except when the field is a sub-array) but of data type
1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
63 and contains only the part of the data in the specified field. Also, record array scalars can be “indexed” this way.

Lập chỉ mục vào một mảng có cấu trúc cũng có thể được thực hiện với một danh sách các tên trường, ví dụ:

1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
64. Kể từ Numpy 1.16, điều này trả về một chế độ xem chỉ chứa các trường đó. Trong các phiên bản cũ hơn của Numpy, nó đã trả lại một bản sao. Xem phần Hướng dẫn sử dụng trên các mảng có cấu trúc để biết thêm thông tin về lập chỉ mục đa năng.Structured arrays for more information on multifield indexing.

Nếu trường truy cập là một mảng con, kích thước của mảng con được nối với hình dạng của kết quả. Ví dụ:

T = [[11, 12, 5, 2], [15, 6,10], [10, 8, 12, 5], [12,15,8,6]]
9

Lập chỉ mục Iterator phẳng#

1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
65 trả về một trình lặp sẽ lặp lại trên toàn bộ mảng (theo kiểu liên tục C với chỉ số cuối cùng thay đổi nhanh nhất). Đối tượng lặp này cũng có thể được lập chỉ mục bằng cách cắt lát cơ bản hoặc lập chỉ mục nâng cao miễn là đối tượng lựa chọn không phải là một tuple. Điều này nên rõ ràng từ thực tế là
1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
65 là quan điểm 1 chiều. Nó có thể được sử dụng để lập chỉ mục số nguyên với các chỉ số-phẳng kiểu C 1 chiều. Do đó, hình dạng của bất kỳ mảng nào được trả về là hình dạng của đối tượng lập chỉ mục.

Gán các giá trị cho các mảng được lập chỉ mục#

Như đã đề cập, người ta có thể chọn một tập hợp con của một mảng để gán cho việc sử dụng một chỉ mục, lát cắt và chỉ mục và mảng mặt nạ. Giá trị được gán cho mảng được lập chỉ mục phải có hình dạng nhất quán (cùng một hình dạng hoặc có thể phát sóng theo hình dạng mà chỉ số tạo ra). Ví dụ, nó được phép gán một hằng số cho một lát:

from array import *

T = [[11, 12, 5, 2], [15, 6,10], [10, 8, 12, 5], [12,15,8,6]]

print(T[0])

print(T[1][2])
0

hoặc một mảng có kích thước phù hợp:

from array import *

T = [[11, 12, 5, 2], [15, 6,10], [10, 8, 12, 5], [12,15,8,6]]

print(T[0])

print(T[1][2])
1

Lưu ý rằng các bài tập có thể dẫn đến các thay đổi nếu gán các loại cao hơn cho các loại thấp hơn (như phao cho INT) hoặc thậm chí các ngoại lệ (gán phức tạp cho phao hoặc INT):

from array import *

T = [[11, 12, 5, 2], [15, 6,10], [10, 8, 12, 5], [12,15,8,6]]

print(T[0])

print(T[1][2])
2

Không giống như một số tài liệu tham khảo (chẳng hạn như các chỉ số mảng và mặt nạ) luôn được thực hiện cho dữ liệu gốc trong mảng (thực sự, không có gì khác có ý nghĩa!). Lưu ý mặc dù, một số hành động có thể không hoạt động như người ta có thể mong đợi ngây thơ. Ví dụ cụ thể này thường gây ngạc nhiên cho mọi người:

from array import *

T = [[11, 12, 5, 2], [15, 6,10], [10, 8, 12, 5], [12,15,8,6]]

print(T[0])

print(T[1][2])
3

Trường hợp mọi người mong đợi rằng vị trí đầu tiên sẽ được tăng lên 3. Trên thực tế, nó sẽ chỉ được tăng thêm 1. Lý do là một mảng mới được trích xuất từ ​​bản gốc (như tạm thời) chứa các giá trị ở 1, 1, 3 , 1, sau đó giá trị 1 được thêm vào tạm thời, và sau đó tạm thời được gán lại cho mảng ban đầu. Do đó, giá trị của mảng tại

1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
67 được gán cho
1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
68 ba lần, thay vì tăng 3 lần.

Xử lý số lượng chỉ số biến trong các chương trình#

Cú pháp lập chỉ mục rất mạnh mẽ nhưng hạn chế khi xử lý một số lượng chỉ số khác nhau. Ví dụ: nếu bạn muốn viết một hàm có thể xử lý các đối số với số lượng kích thước khác nhau mà không phải viết mã trường hợp đặc biệt cho mỗi số lượng kích thước có thể, làm thế nào có thể được thực hiện? Nếu một người cung cấp cho chỉ mục một tuple, tuple sẽ được hiểu là danh sách các chỉ số. Ví dụ:

from array import *

T = [[11, 12, 5, 2], [15, 6,10], [10, 8, 12, 5], [12,15,8,6]]

print(T[0])

print(T[1][2])
4

Vì vậy, người ta có thể sử dụng mã để xây dựng các bộ dữ liệu của bất kỳ số lượng chỉ số nào và sau đó sử dụng chúng trong một chỉ mục.

Các lát cắt có thể được chỉ định trong các chương trình bằng cách sử dụng hàm Slice () trong Python. Ví dụ:

from array import *

T = [[11, 12, 5, 2], [15, 6,10], [10, 8, 12, 5], [12,15,8,6]]

print(T[0])

print(T[1][2])
5

Tương tự như vậy, Ellipsis có thể được chỉ định bằng mã bằng cách sử dụng đối tượng Ellipsis:

from array import *

T = [[11, 12, 5, 2], [15, 6,10], [10, 8, 12, 5], [12,15,8,6]]

print(T[0])

print(T[1][2])
6

Vì lý do này, có thể sử dụng đầu ra từ hàm

1: [(0, 0), (0, 1), (1, 2), (1, 3)]
0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
69 trực tiếp làm chỉ mục vì nó luôn trả về một mảng chỉ mục.

Do sự đối xử đặc biệt của các bộ dữ liệu, chúng không được chuyển đổi tự động thành một mảng như một danh sách. Ví dụ:

from array import *

T = [[11, 12, 5, 2], [15, 6,10], [10, 8, 12, 5], [12,15,8,6]]

print(T[0])

print(T[1][2])
7

Ghi chú chi tiết#

Đây là một số ghi chú chi tiết, không quan trọng đối với việc lập chỉ mục hàng ngày (không theo thứ tự cụ thể):

  • Loại lập chỉ mục Numpy gốc là

    1: [(0, 0), (0, 1), (1, 2), (1, 3)]
    0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
    
    50 và có thể khác với loại mảng số nguyên mặc định.
    1: [(0, 0), (0, 1), (1, 2), (1, 3)]
    0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
    
    50 là loại dữ liệu nhỏ nhất đủ để lập chỉ mục an toàn bất kỳ mảng nào; Đối với lập chỉ mục nâng cao, nó có thể nhanh hơn các loại khác.

  • Đối với các bài tập nâng cao, nói chung không có gì đảm bảo cho thứ tự lặp. Điều này có nghĩa là nếu một phần tử được đặt nhiều lần, không thể dự đoán kết quả cuối cùng.

  • Một chỉ mục trống (tuple) là một chỉ mục vô hướng đầy đủ vào một mảng không chiều.

    1: [(0, 0), (0, 1), (1, 2), (1, 3)]
    0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
    
    72 Trả về vô hướng nếu
    1: [(0, 0), (0, 1), (1, 2), (1, 3)]
    0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
    
    73 là không chiều và một chế độ xem khác. Mặt khác,
    1: [(0, 0), (0, 1), (1, 2), (1, 3)]
    0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
    
    74 luôn trả về chế độ xem.

  • Nếu một mảng không có chiều có mặt trong chỉ mục và nó là một chỉ số số nguyên đầy đủ, kết quả sẽ là vô hướng và không phải là một mảng không chiều. (Lập chỉ mục nâng cao không được kích hoạt.)

  • Khi có dấu chấm lửng (

    1: [(0, 0), (0, 1), (1, 2), (1, 3)]
    0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
    
    40) nhưng không có kích thước (nghĩa là thay thế 0
    from array import *
    
    T = [[11, 12, 5, 2], [15, 6,10], [10, 8, 12, 5], [12,15,8,6]]
    for r in T:
       for c in r:
          print(c,end = " ")
       print()
    
    1), kết quả vẫn sẽ luôn luôn là một mảng. Một chế độ xem nếu không có chỉ mục nâng cao có mặt, nếu không là một bản sao.

  • Tương đương

    1: [(0, 0), (0, 1), (1, 2), (1, 3)]
    0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
    
    77 cho các mảng Boolean không giữ cho các mảng boolean không chiều.

  • Khi kết quả của một hoạt động lập chỉ mục nâng cao không có yếu tố nào nhưng một chỉ số riêng lẻ nằm ngoài giới hạn, cho dù

    1: [(0, 0), (0, 1), (1, 2), (1, 3)]
    0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
    
    04 có được tăng lên không được xác định hay không (ví dụ:
    1: [(0, 0), (0, 1), (1, 2), (1, 3)]
    0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
    
    79 với
    1: [(0, 0), (0, 1), (1, 2), (1, 3)]
    0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
    
    80 nằm ngoài giới hạn).

  • Khi xảy ra lỗi đúc trong quá trình gán (ví dụ: cập nhật một mảng số bằng chuỗi chuỗi), mảng được gán cho có thể kết thúc ở trạng thái cập nhật một phần không thể đoán trước. Tuy nhiên, nếu có bất kỳ lỗi nào khác (chẳng hạn như chỉ mục ra khỏi giới hạn), mảng sẽ không thay đổi.

  • Bố cục bộ nhớ của kết quả lập chỉ mục nâng cao được tối ưu hóa cho mỗi thao tác lập chỉ mục và không có thứ tự bộ nhớ cụ thể nào có thể được giả định.

  • Khi sử dụng một lớp con (đặc biệt là một lớp điều khiển hình dạng của nó), hành vi

    1: [(0, 0), (0, 1), (1, 2), (1, 3)]
    0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
    
    81 mặc định sẽ gọi
    1: [(0, 0), (0, 1), (1, 2), (1, 3)]
    0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
    
    82 để lập chỉ mục cơ bản nhưng không phải để lập chỉ mục nâng cao. Đối với một lớp con như vậy, có thể tốt hơn là gọi
    1: [(0, 0), (0, 1), (1, 2), (1, 3)]
    0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
    
    81 với chế độ xem lớp cơ sở trên dữ liệu. Điều này phải được thực hiện nếu các lớp con
    1: [(0, 0), (0, 1), (1, 2), (1, 3)]
    0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
    
    82 không trả về chế độ xem.

Làm thế nào để bạn tìm thấy chỉ số của một phần tử trong một mảng 2D trong Python?

Chỉ số phần tử trong mảng 2D, chúng ta cũng có thể sử dụng hàm np.where () để tìm vị trí/chỉ số xuất hiện của các phần tử trong một mảng hai chiều hoặc đa chiều.Đối với một mảng 2D, tuple được trả về sẽ chứa hai mảng numpy một cho các hàng và cái còn lại cho các cột.use the np. where() function to find the position/index of occurrences of elements in a two-dimensional or multidimensional array. For a 2D array, the returned tuple will contain two numpy arrays one for the rows and the other for the columns.

Làm cách nào để tìm chỉ mục của một mảng 2D?

Một phần tử trong mảng 2 chiều được truy cập bằng cách sử dụng các chỉ số.Nghĩa là, chỉ mục hàng và chỉ mục cột của mảng.int x = a [1,1];Bảng điều khiển.WriteLine (x);by using the subscripts. That is, row index and column index of the array. int x = a[1,1]; Console. WriteLine(x);

Làm thế nào để bạn tìm thấy chỉ số của một phần tử trong một mảng 2D?

Gọi Numpy.trong đó (điều kiện) với điều kiện là phần tử mảng = mảng = phần tử để trả về chỉ mục của phần tử trong một mảng.Đối với một mảng 2D, gán cho mỗi chỉ mục kết quả cho một biến duy nhất.assign each resulting index to a unique variable.

Làm thế nào để bạn tìm thấy chỉ số của một mảng trong Python?

Nhận chỉ số của các phần tử trong vòng lặp Python tạo ra một mảng numpy và lặp qua mảng để so sánh phần tử trong mảng với mảng đã cho.Nếu phần tử khớp với in chỉ mục.Create a NumPy array and iterate over the array to compare the element in the array with the given array. If the element matches print the index.