假设我有两个矩阵,如下所述:
A = 17 33 49 65 81 97 113 129 145 161 177
B = 31 57 83 109 135
我想将它们放在这样的单元格中:
[31, 17] [57, 17] [83, 17] [109, 17] [135, 17]
[31, 33] [57, 33] [83, 33] [109, 33] [135, 33]
[31, 49] [57, 49] [83, 49] [109, 49] [135, 49]
[31, 65] [57, 65] [83, 65] [109, 65] [135, 65]
[31, 81] [57, 81] [83, 81] [109, 81] [135, 81]
[31, 97] [57, 97] [83, 97] [109, 97] [135, 97]
[31, 113] [57, 113] [83, 113] [109, 113] [135, 113]
[31, 129] [57, 129] [83, 129] [109, 129] [135, 129]
[31, 145] [57, 145] [83, 145] [109, 145] [135, 145]
[31, 161] [57, 161] [83, 161] [109, 161] [135, 161]
[31, 177] [57, 177] [83, 177] [109, 177] [135, 177]
我怎样才能在Matlab中用C代码做到这一点?
答案 0 :(得分:0)
output = zeros(length(A)*length(B),2);
for i=1:length(B)
for j=1:length(A)
output(length(A)*(i-1)+j,:) = [B(i) A(j)];
end
end
答案 1 :(得分:0)
meshgrid
有时可用于生成来自不同集合的所有可能值对的列表:
[X, Y] = meshgrid(B, A);
C = reshape(arrayfun(@horzcat, X(:), Y(:), 'Uniform', 0), numel(A), numel(B));
C
保存您正在寻找的结果。
让我们为以下A
和B
做一个示例:
A = [10 20 30 40];
B = [1 2 3];
meshgrid
的目的是创建一个矩阵,该矩阵沿着维度复制向量。因此,向量B
沿第一维复制,A
沿第二维复制。 [X, Y] = meshgrid(B, A)
的结果是:
X =
10 20 30 40
10 20 30 40
10 20 30 40
Y =
1 1 1 1
2 2 2 2
3 3 3 3
两个载体都是重复的,以产生相同尺寸的矩阵。
关于X(:)
,这意味着X
被转换为列向量,逐列连接。因此X(:)
会产生[10; 10; 10; 20; 20; 20; 30; 30; 30; ...]
。这同样适用于Y(:)
。
现在棘手的部分:arrayfun
分别对输入向量中的每个元素应用一个函数(在这种情况下为horzcat
,这仅表示水平串联)。在我们的例子中,有两个输入向量X(:)
和Y(:)
,因此arrayfun
在每对应的元素上应用horzcat
,最终生成{{1}的所有可能组合}和X
。
此外,由于每个连接结果都是一个向量(包含两个值),因此Y
的输出必须是一个单元格数组,因此必须将名为“UniformOutput”的标志设置为false。
我建议您在the official documentation中详细了解arrayfun
,以便更好地了解它。
最后一部分是arrayfun
,它调整输出单元格数组的尺寸以匹配示例中的尺寸(行数与reshape
的长度相匹配,列数与长度相匹配A
)。
希望这会稍微解决这个问题。