-1

我有一组向量 A i使得 i = 1...N; 其中 N 可以非常大,并且向量包含除 0 之外的整数。所有向量的长度相同,所以这很好。我需要一个函数,其输出是单元格数组 C(数据类不一定是单元格 btw),这样 C 索引实际上是向量元素,单元格内容是共享内容的 A 向量的 i 索引。

F : A--> C

例子:

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];

当然,我想避免按元素进行 for 循环。

4

2 回答 2

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];
于 2013-10-11T13:26:29.570 回答
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值。

于 2013-10-11T12:43:41.717 回答