我有一组向量A i ,使得i = 1 ... N;其中N可以非常大,并且向量包含除0之外的整数。所有向量都具有相同的长度,因此很好。我需要一个函数,其输出是一个单元格数组C(数据类不一定是单元格btw),这样C索引实际上是向量元素,单元格内容是共享内容的A向量的i索引。
F:A i - > ç
示例:
A1 = [1 2 4],
A2 = [3 4 5],
A3 = [4 1 2]
结果C应为
C{1} = [1 3];
C{2} = [1 3];
C{3} = [2];
C{4} = [1 2 3];
C{5} = [2];
当然我想避免使用elementwise for循环。
答案 0 :(得分:1)
我第一次误解了,我相信现在这是正确的:
A = [1 2 4
3 4 5
4 1 2];
Av = num2cell(unique(A(:))', 1);
C = cellfun(@(x)(find(any((A == x)'))), Av, 'UniformOutput', false)
结果
C{1} = [1 3];
C{2} = [1 3];
C{3} = [2];
C{4} = [1 2 3];
C{5} = [2];
答案 1 :(得分:0)
我不确定我是否正确理解你的目标,但我认为这会让你大部分时间都在那里:
使用第一个向量中的1个元素创建所有组合,从第二个向量创建1个组合,从第三个向量创建1个组合。
[X,Y,Z] = ndgrid([1 2 3 4 5], [3 4 5 6 7], [4 8 9 11 2])
[X(:) Y(:) Z(:)]
知道这一点并不难以弄清楚如何获得2个向量之间的所有组合。然后添加所有单个元素应该是微不足道的。
您可能需要sort
这个到第二维并获取所有unique
值。