2017-03-25 11 views
-1

すべての可能な組み合わせを使って配列の要素を掛けようとしました。たとえば、A = [2,3,5] - >2*3,3*5,5*2です。これはどのようにMATLABで行うことができますか?すべての配列要素を掛ける

答えて

0
A = [2,3,5]; 
storage(numel(A),numel(A))=0; % or storage = zeros(numel(A)), whichever you prefer 
for ii = 1:numel(A)-1 
    storage(1:numel(A)-ii,ii) = A(ii)*A(ii+1:end); % Multiplication 
end 

storage = storage(:); % Get a single vector 
storage = storage(storage~=0); % remove zeros 

あなたはすなわち、まず、第1の最初の1の後にすべての要素を掛け、乗算にループを使用することができ、その後、prod付きなどの第二と第二の後にすべての要素

+0

ループを避ける必要があるので、これはMatlabにはありません。 – gamma

+0

@gammaこのプログラムはMATLABの関数で構成されています...早すぎる最適化が悪いので、ループを避けることがまず考えられません。また、R2016aループの速度が大幅に向上しているので、代替方法が高速かどうかを確認する時間が必要です。 – Adriaan

4

nchoosekは正確に何でありますあなたが探しています。ワンライナーとして

C = nchoosek(A,2); %Finding the combinations taken two at a time 
Req = prod(C,2)  %Multipliying the combinations (columns) 

%Output: 
% Req = 

%  6 
% 10 
% 15 

又はReq=prod(nchoosek(A,2),2);

+1

'Req = prod(C、2)'を使用することができます – rahnema1

+0

ありがとう@ rahnema1これは一度に2つ以上の要素を使用する場合のより一般的です。 –

関連する問題