Tôi đang bước đột phá thực sự đầu tiên vào Python và NumPy để thực hiện một số xử lý hình ảnh. Tôi có một hình ảnh được tải dưới dạng Mảng NumPy 3 chiều, trong đó trục 0 đại diện cho các dải hình ảnh, trong khi các trục 1 và 2 đại diện cho các cột và các hàng pixel. Từ đây, tôi cần lấy ma trận 3x1 đại diện cho mỗi điểm ảnh và thực hiện một vài phép toán dẫn đến một ma trận 3x1 khác, sẽ được sử dụng để xây dựng một hình ảnh kết quả.Nhân ma trận yếu tố khôn ngoan trong NumPy
Tiếp cận của tôi đầu tiên (giản thể và với dữ liệu ngẫu nhiên) trông như thế này:
import numpy as np
import random
factor = np.random.rand(3,3)
input = np.random.rand(3,100,100)
results = np.zeros((3,100,100))
for x in range(100):
for y in range(100):
results[:,x,y] = np.dot(factor,input[:,x,y])
Nhưng điều này đập vào mắt tôi như không thanh nha và không hiệu quả. Có cách nào để làm điều này trong một fasion yếu tố khôn ngoan, ví dụ .:
results = np.dot(factor,input,ElementWiseOnAxis0)
Trong cố gắng để tìm một giải pháp cho vấn đề này, tôi tình cờ gặp this câu hỏi, mà rõ ràng là khá tương tự. Tuy nhiên, tác giả đã không thể giải quyết vấn đề cho sự hài lòng của họ. Tôi hy vọng rằng một cái gì đó đã thay đổi kể từ năm 2012, hoặc vấn đề của tôi là hoàn toàn khác với vấn đề của họ để làm cho nó dễ dàng giải quyết được hơn.
Điều này làm việc hoàn hảo cho những dữ liệu này và cũng nên thích ứng với các vấn đề tương tự! – Joe
Trong trường hợp hình dạng đầu vào của tôi là: (100, 100, 3). Đã cho tôi một thời gian để hiểu nó, nhưng có thể hữu ích cho người khác. Trong trường hợp của tôi là: kết quả = np.einsum ('ij, klj-> kli', hệ số, đầu vào) – Luigolas