2012-07-10 29 views
8

Tôi đang tìm một giải pháp thanh lịch cho vấn đề rất đơn giản này trong MATLAB. Giả sử tôi có một ma trậnMATLAB: trích xuất submatrix với chỉ mục logic

>> M = magic(5) 

M = 

    17 24  1  8 15 
    23  5  7 14 16 
    4  6 13 20 22 
    10 12 19 21  3 
    11 18 25  2  9 

và một biến logic của form

I = 

    0  0  0  0  0 
    0  1  1  0  0 
    0  1  1  0  0 
    0  0  0  0  0 
    0  0  0  0  0 

Nếu tôi cố gắng để lấy các yếu tố của M liên quan đến 1 giá trị trong I, tôi nhận được một vector cột

>> M(I) 

ans = 

    5 
    6 
    7 
    13 

Cách đơn giản nhất để lấy ma trận [5 7 ; 6 13] từ chỉ mục logic này là gì?

Nếu tôi biết hình dạng của các phần tử khác 0 của I, tôi có thể sử dụng định dạng lại sau khi lập chỉ mục, nhưng đó không phải là trường hợp chung.

Ngoài ra, tôi biết rằng hành vi mặc định cho loại lập chỉ mục này trong MATLAB thực thi tính nhất quán đối với trường hợp trong đó các giá trị khác không ở I không tạo thành ma trận, nhưng tôi tự hỏi liệu có đơn giản hay không giải pháp cho trường hợp cụ thể này.

Trả lời

11

Đây là một cách để thực hiện việc này. Giả sử rằng tất cả các hàng của I có cùng số hàng. Nó cũng giả định rằng tất cả các cột của I có cùng số có các cột, vì Submatrix phải là hình chữ nhật.

%# Define the example data. 

M = magic(5); 
I = zeros(5); 
I(2:3, 2:3) = 1; 

%# Create the Submatrix. 

Submatrix = reshape(M(find(I)), max(sum(I)), max(sum(I'))); 
2
M = magic(5); 
I = [ ... ]; 

ind = find(I); %# find indices of ones in I 
[y1, x1] = ind2sub(size(M), ind(1)); %# get top-left position 
[y2, x2] = ind2sub(size(M), ind(end)); %# get bottom-right position 
O = M(y1:y2, x1:x2); %# copy submatrix 
3

Dưới đây là một giải pháp rất đơn giản:

T = I(any(I'),any(I)); 
T(:) = M(I); 
+0

Chỉ cần những gì tôi sẽ trả lời :-) –

+0

Điều đó không làm việc allways, ví dụ khi không đối xứng. – rst

+0

@RobertStettler Nếu bạn có nghĩa là ma trận 'I' không thể được thực hiện ngẫu nhiên, đó là sự thật, nhưng nhìn vào câu hỏi tôi nghĩ rằng đó là một giới hạn hợp lý. Nếu bạn có ý nghĩa gì đó khác: Tôi không thấy làm thế nào có liên quan đến biểu thức ở đây, bạn có lẽ có thể trình bày một ví dụ mà giải pháp không thành công? (Ma trận đầu vào, đầu ra, đầu ra dự kiến). –

Các vấn đề liên quan