【发布时间】:2023-03-15 09:10:01
【问题描述】:
我有一个不同长度或大小的字符串或数组列表。我想使用最短的字符串,并通过将最短的字符串窗口一一移动来与其他字符串进行比较。
假设我想做加法,我有 [2 1 3] 作为我的最短列表并想在 [4 5 7 8 9] 上执行加法
1st addition: [2 1 3] + [4 5 7]
2nd addition: [2 1 3] + [5 7 8]
3rd addition: [2 1 3] + [7 8 9]
上面我发现的两个数组的例子可以用hankel函数解决。
a = [2 1 3];
b = [4 5 7 8 9];
idx = hankel(1:numel(a), numel(a):numel(b));
c = bsxfun(@plus, b(idx.'), a);
结果:
c =
6 6 10 % [2 1 3] + [4 5 7]
7 8 11 % [2 1 3] + [5 7 8]
9 9 12 % [2 1 3] + [7 8 9]
但是现在,我想为他们所有人表演,并且有很多组合。假设数组A、B、C、D和E,所以可能的添加可以是A+B、A+C、A+D、A+E、@987654 B+D、B+E、C+D、C+E、D+E。
例如:
A=[2 1 3];B=[4 5 7 8 9];C=[6 9];D=[3 6 4 2 1 1];E=[4 6 9]
for A+B
6 6 10
7 8 11
9 9 12
for A+C
8 10
7 12
for A+D
5 7 7
8 5 5
6 3 4
4 2 4
... and the rest
如何使用 MATLAB 做到这一点?非常感谢
【问题讨论】:
-
如果
a = [2 1 3]; b = [4 5 7 8 9];,什么是A、B、C、D和E? -
到目前为止你尝试过什么?您现在只是在总结上一个问题的答案。
-
@Nick ,最后一个问题是只包含两个数组,现在我想将它扩展到两个以上的数组。谢谢
标签: arrays matlab combinatorics sliding-window