문제

MATLAB에서 2 개의 벡터를 결합하여 다음과 같은 방법이 있습니까?

mat = zeros(length(C),length(S));
for j=1:length(C)
    mat(j,:)=C(j)*S;
end

정상적인 MATLAB 구문 사용 :

mat = C * S(1:length(S))

이것은 "내부 매트릭스 치수는 정상적인 매트릭스 작업을 시도하기 때문에 오류에 동의해야합니다"를 제공합니다. 이것은 표준 선형 대수 작동이 아니므로 MATLAB에서 올바르게 표현하는 방법을 잘 모르겠지만, MATLAB에서는 과도하게 느린 루프를 필요로하지 않으면 서 가능한 것 같습니다.

도움이 되었습니까?

해결책

설명에서 간단한 매트릭스 작업처럼 들립니다. 당신은 당신이 당신이 올바른 차원을 가지고 있는지 확인해야합니다. 그리고 에스. 열 벡터 여야합니다 (길이 (c)-BY-1) 및 에스 행 벡터 여야합니다 (1- x-길이 (들)). 그들이 올바른 차원이라고 가정하면 다음을 수행하십시오.

mat = C*S;

차원이 확실하지 않은 경우 작동해야합니다.

mat = (C(:))*(S(:)');

편집하다: 사실, 나는 괄호에 약간 미쳤다. 수술 순서 문제가 없기 때문에 그들 중 일부는 불필요합니다. 더 깨끗한 버전은 다음과 같습니다.

mat = C(:)*S(:)';

설명:

그만큼 매트릭스 곱셈 연산자 Matlab에서 내부 제품 (스칼라 값으로 결과) 또는 an 외부 제품 (매트릭스 결과) 적용되는 벡터의 치수에 따라.

위의 마지막 방정식은 콜론 운영자 벡터 인수의 차원을 재구성합니다. 구문 씨(:) 내용을 재구성합니다 단일 열 벡터로. 구문 에스(:)' 내용을 재구성합니다 에스 컬럼 벡터로,이를 행 벡터로 전송합니다. 곱하면 크기의 매트릭스가 발생합니다 (길이 (c)-에 의해-길이 (들)).

메모: 콜론 연산자의 이러한 사용은 모든 차원의 벡터 및 행렬에 적용 할 수 있으므로 내용물을 단일 열 벡터로 재구성 할 수 있습니다 (일부 작업은 이것은 다른 질문입니다).

다른 팁

Matlab에서 이것을 실행 해보세요 :

mat = C*S'

에서와 같이 :

C = [1; 2; 3];
S = [2; 2; 9; 1];

mat = zeros(length(C),length(S));
for j=1:length(C)
    mat(j,:)=C(j)*S;
end

% Equivalent code:
mat2 = C*S';

myDiff = mat - mat2

다음을 의미합니까?

mat = zeros(length(C),length(S));
for j=1:length(C)
    mat(j,:)=C(j)*S;
end

그렇다면 단순히 매트릭스 곱셈입니다.

C' * S    % if C and S are row vectors
C * S'    % if C and S are column vectors

당신이 여부를 모른다면 C 그리고 S 행 벡터 또는 열 벡터 인 경우 트릭을 사용하여 열 벡터로 전환 한 다음 전환 할 수 있습니다. S 곱하기 전에 :

C(:) * S(:)'

나는 당신이하고있는 일에 대해 완전히 명확하지 않습니다. 결과 매트릭스가 구성되는 것처럼 보입니다. length(C) 줄, 어디에 i줄은 벡터입니다 S 스케일링 i진입 C (벡터를 위트 스크립팅하면 스칼라가 제공되므로). 이 경우 같은 일을 할 수 있습니다

mat = repmat(C,[1 length(S)]) .* repmat(S, [length(C) 1])

당신이 타일 C 열을 가로 질러, 그리고 S 다운 행.

이 시도:

C = 1 : 3 S = 1 : 5 MAT1 = C '*S

MAT2 = BSXFUN (@Times, C ', S)

(Esp. 필요한 기능이 더 간단하지 않은 경우 좋은 경우)

-로든

meshgrid를 사용해보십시오 :

[Cm, Sm] = meshgrid(C, S);
mat = Cm .* Sm;

편집 : Nevermind, 매트릭스 곱셈도 할 것입니다. 하나의 열 벡터 C와 한 행 벡터 S가 필요합니다. 그런 다음 C * S를 수행하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top