これがループソリューションとrepmat
ソリューションです。
%いくつかのサンプルデータを定義します。
編集: a
とb
は列ベクトルであり、行ベクトルではありません。
a = [ 1:10 ]';
b = [ 6:10 ]';
%5:10
の垂直方向のサイズは5ではなく6であるため、質問に一致するように6:10
使用されます。
まず、非常に基本的なループソリューションです。すべてaIndex
のbIndex
ペアをループし、でアドレス指定された要素の差を減算し、結果aIndex
をbIndex
に格納しLoopDifferenceMatrix(aIndex, bIndex)
ます。
for aIndex = 1:size(a,1)
for bIndex = 1:size(b,1)
LoopDifferenceMatrix(aIndex, bIndex) = a(aIndex) - b(bIndex);
end
end
これは代替repmat
ソリューションです。a
を使用して、水平方向のサイズが(の水平方向のサイズ)とrepmat
一致するように水平方向に複製します。次に、を使用して垂直方向に転置を複製し、垂直方向のサイズが(の元の水平方向のサイズ)と一致するようにします。レプリケートからレプリケートを減算し、結果をに格納します。size(b,1)
b
b
repmat
size(a,1)
a
a
b
DifferenceMatrix
DifferenceMatrix = repmat(a, 1, size(b,1)) - repmat(b', size(a,1), 1);
DifferenceMatrix =
-5 -6 -7 -8 -9
-4 -5 -6 -7 -8
-3 -4 -5 -6 -7
-2 -3 -4 -5 -6
-1 -2 -3 -4 -5
0 -1 -2 -3 -4
1 0 -1 -2 -3
2 1 0 -1 -2
3 2 1 0 -1
4 3 2 1 0
isequal(DifferenceMatrix, LoopDifferenceMatrix)
ans =
1