Trong trường hợp cuối cùng, hai danh sách riêng lẻ được coi là các hoạt động lập chỉ mục riêng biệt (đây là từ ngữ thực sự khó xử vì vậy xin vui lòng chịu đựng với tôi).
Numpy thấy hai danh sách hai số nguyên và quyết định rằng bạn đang yêu cầu hai giá trị. Chỉ mục hàng của mỗi giá trị đến từ danh sách đầu tiên, trong khi chỉ mục cột của mỗi giá trị đến từ danh sách thứ hai. Do đó, bạn có được a[1,1]
và a[2,2]
. Các :
ký hiệu không chỉ mở rộng vào danh sách bạn đã suy luận một cách chính xác, nhưng cũng nói với NumPy mà bạn muốn tất cả các hàng / cột trong phạm vi đó.
Nếu bạn cung cấp các chỉ mục danh sách được quản lý theo cách thủ công, chúng phải có cùng kích thước, bởi vì kích thước của mỗi / bất kỳ danh sách nào là số phần tử bạn sẽ nhận được. Ví dụ: nếu bạn muốn các phần tử trong cột 1 và 2 của hàng 1,2,3:
>>> a[1:4,[1,2]]
array([[ 6, 7],
[11, 12],
[16, 17]])
Nhưng
>>> a[[1,2,3],[1,2]]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: shape mismatch: indexing arrays could not be broadcast together with shapes (3,) (2,)
Các cựu nói với NumPy rằng bạn muốn có một loạt các hàng và cột cụ thể, trong khi sau này nói "làm cho tôi các yếu tố tại (1,1)
, (2,2)
và (3, hey! what the?! where's the other index?)
"
a[[1,2],[1,2]]
nghĩa vụ phải nóia[[1:2],[1:2]]
? Có một lỗi đánh máy tronga[1:3,[1,2]]
? Hay tôi đang hiểu lầm?