【问题标题】:How to combine first element of cell array with all elements of another array and so on?如何将单元格数组的第一个元素与另一个数组的所有元素结合起来,依此类推?
【发布时间】:2016-08-01 17:01:08
【问题描述】:

我有两个 (n,1) 元胞数组。两者都在每个单元格内包含 1x8 单元格数组。

我需要:

1) 将第一个数组的第一个元素与第二个数组的每个元素组合起来

2) 将第一个数组的第二个元素与第二个数组的每个元素组合起来,以此类推。

然后将它们存储在第三个单元格数组中,如下所示:

{ {f_array1} {s_array1}; {f_array1} {s_array2}; {f_arrayN} {s_array2}; {f_arrayM} {s_arrayM};

我尝试了一些类似这样的 for 循环:

for l = 1:u(1,1)
    for m = 1:v(1,1)
        A{l} = {e{l},f{m}};
    end
end

但in only将一个元素与一个元素结合起来。

有什么建议吗?

【问题讨论】:

  • 你是说 A{l,m} 吗?
  • 不,只有 A{l}。为什么?
  • 你能举一个你的输入和输出的例子吗?
  • 输入是一个大小为 nx1 的元胞数组,每个元胞内部包含一些具有 1x8 个元素的元胞数组。输出应该是一个大小为 nx2 的元胞数组,如下所示: { {f_array1} {s_array1}; {f_array1} {s_array2}; {f_arrayN} {s_array2}; {f_arrayM} {s_arrayM};
  • 我明白了。好吧,祝你好运。我希望你能解决这个问题。

标签: matlab


【解决方案1】:

我会在元胞数组上使用repmat 将它们展开,然后简单地连接它们。

f_array = {{{1} {1} {1} {1} {1} {1} {1} {1}},...
    {{2} {2} {2} {2} {2} {2} {2} {2}},...
    {{3} {3} {3} {3} {3} {3} {3} {3}}};
s_array = {{{4} {4} {4} {4} {4} {4} {4} {4}},...
    {{5} {5} {5} {5} {5} {5} {5} {5}},...
    {{6} {6} {6} {6} {6} {6} {6} {6}}};


f_expanded = repmat(f_array(:), numel(s_array), 1);
s_expanded = repmat(s_array(:), 1, numel(f_array)).';

output = num2cell(cat(2, f_expanded(:), s_expanded(:)), 2);

【讨论】:

  • 感谢您的帮助,它有点工作。问题是,它与第一个不匹配,第二个,第三个,四个等等。它只复制第二个 N 次第一个。
  • 实际上,它正确地进行了匹配,但是它将第二个数组元素中的每个元素与第一个元素的三个元素匹配:(
  • @marco 那么如果你把我打电话给f_arrays_array 的那个翻一下呢?
  • 非常感谢您的帮助,确实比for循环快。你救了我的命,兄弟
猜你喜欢
  • 2022-11-16
  • 2022-11-12
  • 2018-06-12
  • 1970-01-01
  • 1970-01-01
  • 2020-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多