这里有一个循环的解决方案和repmat
解决方案。
%定义一些示例数据。
编辑:a
和b
是列向量,而不是行向量。
a = [ 1:10 ]';
b = [ 6:10 ]';
%5:10
具有6,而不是5纵向尺寸,所以,以匹配问题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
水平尺寸)。然后垂直通过使用repmat
使得其垂直尺寸相匹配size(a,1)
(的a
原始水平尺寸)重复实验换位b
。从复制的b
中减去复制的a
,并将结果存储在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
来源
2012-06-14 07:30:35
nrz
你想'A'和'B'为行向量,比方说一个'= 1:10'和'B = 6:10',或列向量,比方说一个'= [1:10]“'和'b = [1:10]''?其他问题是“长度(5:10)”是你的问题中的“6”,而不是“5”。 – nrz
这是一个错字。谢谢 – Buntalan