>

두 벡터 제공

a = 1:3;
b = 2:4;

요소 단위의 돌연변이 화 a.*b  생산하다

[ 2  6  12 ]

결과 pyzwyz를 호출 우리는 c

그러나 나는 어떻게 c(i) = a(i)*b(i) 를 이해하지 못한다 a.*b'  그리고 b'.*a  모든 농산물

b'*a

행렬 곱셈의 경우 우리는 [ 2 4 6 3 6 9 4 8 12 ] 를 알고있다 .
그러나 왜 다른 두 제품도 같은 결과를 낳습니까?

b'*a
  • 답변 # 1

    암시 적 확장 (2016b에 도입)으로 인해 bsxfun 를 사용하는 것과 본질적으로 동일합니다 .
    그러나 그 의미는 무엇입니까?

    설정 :

    a = 1:3;
    b = 2:4;
    
    

    모든 MATLAB 버전 :

    c = a.*b; 
    % c = [2 6 12], element-wise multiplication c(j) = a(j)*b(j)
    c = b'*a;  
    % c = [2 4 5; 3 6 9; 4 8 12]
    % standard matrix multiplication of vectors
    % c(i,j) = a(i) + b(j)
    c = bsxfun(@times, b', a)
    % c = [2 4 5; 3 6 9; 4 8 12]
    % bsxfun applies the function (in this case @times) to b' and a
    
    

    정의로 bsxfun  "함수 핸들에 의해 지정된 요소 별 이진 연산을싱글 톤 확장이 활성화 된배열 A 및 B에 적용합니다." 이는 싱글 톤 차원 (크기가 1 인 차원)이 bsxfun 에 제공된 다른 인수의 크기와 일치하도록 행 단위/열 단위로 확장됨을 의미합니다. .

    그래, bsxfun(@times, b', a)  

    와 같습니다.

    % b' in singleton in the 2nd dimension, a is singleton in the 1st dimension
     % Use repmat to perform the expansion to the correct size
     repmat(b', 1, size(a,2)) .* repmat(a, size(b',1), 1)
     % Equivalent to...
     repmat(b', 1, 3) .* repmat(a, 3, 1)
     % Equivalent to...
     [2 2 2; 3 3 3; 4 4 4] .* [1 2 3; 1 2 3; 1 2 3]   
     % = [2 4 5; 3 6 9; 4 8 12] the same as b'*a
    
    

    R2016b 이전

    c = a.*b'; % Error: Matrix dimensions must agree.
    c = b'.*a; % Error: Matrix dimensions must agree.
    
    

    R2016b부터

    최신 MATLAB 버전은 암시 적 확장을 사용합니다. 이는 기본적으로 bsxfun 를 의미합니다.  유효한 작업에 필요한 경우 동등한 것을 '후드 아래'라고합니다.

    c = a.*b'; % [2 4 5; 3 6 9; 4 8 12] the same as bsxfun(@times, a, b')
    c = b'.*a; % [2 4 5; 3 6 9; 4 8 12] the same as bsxfun(@times, b', a)
    % These two are equivalent also because order of operations is irrelevant
    % We can see this by thinking about the expansion discussed above
    
    

    <시간>

    알다시피, 벡터 방향을 추적하지 않으면 혼란 스러울 수 있습니다! 확장없이 1D 출력을 얻으려면 콜론 연산자를 사용하여 입력이 1D열 벡터가되도록

    c = a(:).*b(:); % c = [2; 6; 12] always a column vector
    
    

  • 답변 # 2

    나열한 예는 모두 요소 별 곱셈입니다.

    a.*b'  이전 matlab에서 오류가 발생합니다.

    bsxfun(@times, a, b')
    
    

    R2016b 이후 Matlab의

    이것은 a.*b' 의 동일한 결과를 설명해야합니다. b'.*a  그리고 b'*a .

    a * b'  행렬 곱셈입니다 (내부 치수 일치).

  • 이전 angular ui router - angularjs - 로그인하지 않고 사용자가 내부 페이지로 이동하지 못하게하는 방법 및 성공적인 로그인시 세션을 저장하는 방법
  • 다음 css - p-datatable rowStyleClass는 모든 행의 스타일을 지정하지 않습니다