Tôi có một ma trận mxn
A
, nơi m%t = n%t = 0
, do đó một nhỏ txt
ma trận B
gạch ma trận không biên giới hoặc chồng chéo. Tôi muốn kiểm tra xem nếu A
bao gồm hoàn toàn các ô từ B
mà không tính toán ốp lát như là một bước trung gian càng hiệu quả càng tốt. Hơn nữa đối với trường hợp sử dụng đặc biệt của tôi, không cần phải biết B
. Nó là đủ để kiểm tra nếu A
lặp lại chính nó mỗi gạch txt
theo mọi hướng.số Đếm lần xuất hiện của một mảng mà không chồng chéo lên nhau trong một mảng
ví dụ Numeric:
A = [[1, 0, 1, 0],
[0, 1, 0, 1],
[1, 0, 1, 0],
[0, 1, 0, 1]]
B.shape = [2,2]
--> True
B.shape = [1,1]
--> False
Cho đến nay, tôi tính toán một ma trận so sánh C
, mà chỉ đơn giản là một ốp lát của B
để phù hợp với kích thước của A
:
import numpy as np
x,y = B.shape
x_a, y_a = A.shape
x_t = x_a/x
y_t = y_a/y
B_dash = A[:x, :y]
C = np.tile(B_dash,(x_t, y_t))
np.count_nonzero(A-C)
Có cách nào nhanh hơn , mà không tính toán C
?
Tôi có hiểu chính xác không, rằng 'viewW' không tạo đối tượng bộ nhớ có hình dạng A, mà đúng hơn là một, với hình dạng B? Trong các thử nghiệm của tôi, nó nhanh hơn một chút đối với các mảng lớn. Vẫn chưa đánh giá mức sử dụng bộ nhớ. – Dschoni
@ Dschoni Vâng, nó tạo ra một khung nhìn cửa sổ vào mảng 'A' với hình dạng của' B' làm tham số cửa sổ, do đó không sử dụng bộ nhớ bổ sung ở đó. – Divakar
Giới thiệu phương pháp tiếp cận # 1: /usr/lib/python2.7/dist-packages/skimage/util/shape.py:92: RuntimeWarning: Không thể cung cấp chế độ xem trên mảng nhập không liền kề mà không sao chép. – Dschoni