使用MATLAB实现多个向量的所有可能交点
我有一组向量Ai,使得I=1…N;其中N可以非常大,d向量包含除0以外的整数。所有向量的长度都相同,这很好。我需要一个输出为单元数组C(数据类不一定是单元btw)的函数,这样C索引实际上是向量元素,单元内容是共享内容的向量的I索引 F:Ai-->C 例如:使用MATLAB实现多个向量的所有可能交点,matlab,vector,set-intersection,Matlab,Vector,Set Intersection,我有一组向量Ai,使得I=1…N;其中N可以非常大,d向量包含除0以外的整数。所有向量的长度都相同,这很好。我需要一个输出为单元数组C(数据类不一定是单元btw)的函数,这样C索引实际上是向量元素,单元内容是共享内容的向量的I索引 F:Ai-->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];
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循环。我不确定是否正确理解了您的目标,但我认为这将使您在大多数情况下达到目标: 使用第一个向量中的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个向量之间的所有组合。然后添加所有单个元素应该很简单
您可能希望将其排序到第二个维度,并获取所有
唯一的值。我第一次误解了,我相信现在这是正确的:
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];
你已经很清楚地描述了你的问题。SO社区现在希望您展示代码并提出问题。你两个都没做。我需要一个函数不是问题,问题是我没有任何代码。我只有那个输入数组,我的问题是如何在函数中实现它。我不期望我能使用一个准备好的函数。一个提示甚至可以帮到我。我认为提问者实际上不是在寻找交叉点,而是在寻找组合。是的,也许标题应该是向量空间中哪些元素由哪些向量共享?
或类似的smth。@bop你能更清楚地解释你得到的C
应该是什么吗?也许可以减小示例A
s的大小,并给出C
的完整输出?这将非常占用内存,对吗?我有100-1000个1 x 8向量,向量空间为200-10000个元素。@bop向量化解决方案通常会消耗更多内存以提高速度。然而,不管采用哪种方法,我认为您的输出规模将是巨大的,因此如果您想同时获得所有组合,您可能会遇到任何一种方法的问题。如果您不需要同时使用它们,那么循环可能是占用内存最少的。