Tổng mảng 2D phức tạp trong Python qua các chỉ số nhất định
Có một mảng 2-d như thế này:
img = [
[[1, 2, 3], [4, 5, 6], [7, 8, 9]],
[[2, 2, 2], [3, 2, 3], [6, 7, 6]],
[[9, 8, 1], [9, 8, 3], [9, 8, 5]]
]
Và tôi chỉ muốn lấy tổng các chỉ số nhất định như sau:
indices = [[0, 0], [0, 1]] # which means img[0][0] and img[0][1]
# means here is represents
Có một câu hỏi tương tự về mảng 1-d trong stackoverflow trong liên kết này , nhưng nó đã gặp lỗi khi tôi cố gắng sử dụng print(img[indices])
. Bởi vì tôi muốn làm rõ rằng phần tử của img
là những phần tử chỉ ra bằng chỉ số, và sau đó lấy nghĩa là tổng của nó.
Sản lượng mong đợi
[5, 7, 9]
Trả lời
Sử dụng NumPy:
import numpy as np
img = np.array(img)
img[tuple(indices)].sum(axis = 0)
#array([5, 7, 9])
Nếu kết quả là [5, 7, 9] thì tổng trên cột của danh sách. Sau đó, dễ dàng:
img = np.asarray(img)
indices = [[0, 0], [0, 1]]
img[(indices)].sum(axis = 0)
Kết quả:
array([5, 7, 9])
Khi bạn cung cấp một chỉ mục ưa thích, mỗi phần tử của bộ chỉ mục đại diện cho một trục khác nhau. Hình dạng của mảng chỉ mục phát sóng theo hình dạng của đầu ra mà bạn nhận được.
Trong trường hợp của bạn, các hàng indices.T
là chỉ số trong mỗi trục. Bạn có thể chuyển đổi chúng thành một bộ chỉ mục và nối thêm slice(None)
, tương đương với lập trình :
. Bạn có thể lấy giá trị trung bình của mảng 2D kết quả trực tiếp:
img[tuple(indices.T) + (slice(None),)].sum(0)
Một cách khác là sử dụng toán tử splat:
img[(*indices.T, slice(None))].sum(0)