MATLAB의 colon 연산자는 다른 기능을 제공하므로 예상 한대로 작동하지 않습니다. 사실, MATLAB에는 이중 내부 제품에 대한 기본 제공 구현이 없습니다. 당신은 예를 들어, 스스로를 구현해야합니다
idx = max(0, ndims(A) - 1); %// Index of first common dimension
B_t = permute(B, circshift(1:ndims(A) + ndims(B), [0, idx - 1]));
double_dot_prod = squeeze(sum(squeeze(sum(bsxfun(@times, A, B_t), idx)), idx));
곳 A
및 B
이 텐서 (즉 다차원 행렬)입니다. 이것을 벡터화하는 것은 어려운 부분이었습니다. 그래서 저는 수학이 올바르게되기를 바랍니다!
원하는 경우 편의를 위해이 코드를 함수에 넣을 수 있습니다. 좋은 연습을 위해서 두 텐서가 둘째 등급 이상인지 확인하십시오. 조언
function C = double_dot(A, B)
assert(~isvector(A) && ~isvector(B))
idx = max(0, ndims(A) - 1);
B_t = permute(B, circshift(1:ndims(A) + ndims(B), [0, idx - 1]));
C = squeeze(sum(squeeze(sum(bsxfun(@times, A, B_t), idx)), idx));
단어 : 여기 당신을위한 친절한 복사 - 붙여 넣기 버전의 난 당신이 MATLAB 언어의 기초를 숙지 얻기 위해 온라인 자습서를 읽어 보는 것이 좋습니다.
1. 텐서의 표현 방법과 제품 수행 방법을 보여주는 코드를 제공하십시오. 2. by ** double dot product ** MATLAB에서'(:)'연산자와 같은'(:)'연산자를 사용합니까? –
모든 코드를 제공하지 않았습니다. 우리가 뭘 잘못하고 있는지 어떻게 알 수 있습니까? –
@ISarasky 내 대답 좀 보셨습니까? –