2017-11-15 9 views
2

나는 사람들이 받아 볼 ==, ~=, 다음과 같이 그 항목을 얻을 수있는 매트릭스를 다음 괄호 안에 다른 차원으로 매트릭스 사이 >, < :matlab에 다른 차원과 두 개의 매트릭스를 비교

b = 

    1  4  7 
    2  5  8 
    3  6  9 

>> b == [1 2 3] 

ans = 

    3×3 logical array 

    1 0 0 
    0 0 0 
    0 0 0 

>> b == [1 4 7] 

ans = 

    3×3 logical array 

    1 1 1 
    0 0 0 
    0 0 0 

>> b == [1 4 5] 

ans = 

    3×3 logical array 

    1 1 0 
    0 0 0 
    0 0 0 

>> b == [1 5 4] 

ans = 

    3×3 logical array 

    1 0 0 
    0 1 0 
    0 0 0 

>> a 

a = 

    1  2  3  4  5  6  7  8  9 10 
    1  2  3  4  5  6  7  8  9 10 
    1  2  3  4  5  6  7  8  9 10 

>> a(:, b == [1 4 5]) 

ans = 

    1  4 
    1  4 
    1  4 

>> a(:, b == [1 5 4]) 

ans = 

    1  5 
    1  5 
    1  5 

>> b 

b = 

    1  4  7 
    2  5  8 
    3  6  9 

>> b > [1 3 2] 

ans = 

    3×3 logical array 

    0 1 1 
    1 1 1 
    1 1 1 

을 그러나, 나는 왜 이것이 효과가 있을지 전혀 모른다. 이 사용법에 대한 설명이 있습니까? (내 영어가이 질문을 더 잘 설명하는 것은 좋지 않습니다. 누구든지이 질문을 편집하여 더 이해하기 쉽도록 할 수 있습니다. 미리 감사드립니다.)

+1

[암시 적 확장 (https://www.mathworks.com/help/matlab/ref/bsxfun.html) 암시, 또는 산술에 대한 – rahnema1

+0

자세한 설명, expantion : https://blogs.mathworks.com/loren/2016/10/24/matlab-arithmetic-expands-in-r2016b/ – Adiel

+0

R2016b 이후 논리적이고 매우 편리한 M 언어 추가. IMHO, 그것은 포함되어서는 안됩니다. 이 주제에 관해 이미 많은 논의가 있었으므로 여기서 논의를 다시하지는 ​​않겠지 만 나머지 선형 대수학의 표기법과의 비호 환성은 사실 아주 혼란 ​​스럽습니다. –

답변

1

R2016b 이후로 MATLAB은 implicit expansion을 사용합니다. 즉, 입력의 크기 (크기 1의 치수)가 다른 입력과 동일한 크기로 반복됩니다. 예를 들어

: 당신의 예

b = [1 4 7 
    2 5 8 
    3 6 9] 

%% Singleton dimension as rows 
b == [x y z] 
% is equivalent to 
b == repmat([x y z], size(b,1), 1) 
% is equivalent to 
b == [x y z 
     x y z 
     x y z] 

%% Singleton dimension as columns 
b == [x; y; z] 
% is equivalent to 
b == repmat([x; y; z], 1, size(b,2)) 
% is equivalent to 
b == [x x x 
     y y y 
     z z z] 

모든 3가 아래로 비교 행 벡터를 반복하고 b의 각 행에 비교, 케이스 "행과 같은 단일 차원"입니다. 결과물이 예상대로 쉽게 볼 수 있습니다.


암시 확장

bsxfun의 사용과 (사전 R2016b 포함) MATLAB의 모든 버전에서 사용할 수 있습니다. 이것은 너무과 같습니다

% Since 2016b 
b == [1 2 3]; 
% All versions (@eq is the '==' equals function) 
bsxfun(@eq, b, [1 2 3])