về cơ bản, bạn muốn để có thể lập trình tạo ra các tuple :, :, :, :, :, i, ...
để vượt qua nó trong khi chỉ số của a
. Thật không may, bạn không thể đơn giản sử dụng phép nhân tuple bình thường trên toán tử kết nối trực tiếp (tức là, (:,) * k
sẽ không hoạt động để tạo ra một bộ gồm k
toán tử kết nối). Tuy nhiên, bạn có thể lấy một thể hiện của một "dấu hai chấm" bằng cách sử dụng colon = slice(None)
. Sau đó, bạn có thể làm b = a[(colon,) * k + (i,)]
, có hiệu quả sẽ lập chỉ mục a
ở cột thứ i
của thứ nguyên k
.
Bao bì này trong một hàm, bạn sẽ nhận được:
def nDimSlice(a, k, i):
colon = slice(None)
return a[(colon,) * k + (i,)]
.Tôi sẽ vui vẻ sao chép - & - dán này, nhưng một liên kết đến tài liệu có lẽ vẫn hữu ích. –
ký hiệu cắt lát, ví dụ: 'a []' chỉ là cú pháp đường cho một lệnh gọi '__getitem__' chuyển nó thành một bộ tuple, trong trường hợp này là một đối tượng slice (ký hiệu': 'là cú pháp suger cho đối tượng' slice') –
. cũng đánh vần rằng 'b [np.index_exp [:] * k + np.index_exp [i]]', có thể dễ đọc hơn một chút – Eric