Arrays 如何在没有两个循环的情况下将每个元素与单元数组的每个元素进行比较?

Arrays 如何在没有两个循环的情况下将每个元素与单元数组的每个元素进行比较?,arrays,matlab,comparison,cell,Arrays,Matlab,Comparison,Cell,我有一个两个单元数组R和C(两个向量有R(n个元素),C(m个元素)),我的任务是比较R的每个元素和R的每个元素,比较C的每个元素和C的每个元素。比较是找到两个单元的交点。结果我想得到两个矩阵。一个矩阵Q表示R nxn,其中单元Q(i,j)是两个元素R(i)和R(j)的交点,第二个矩阵P表示C mxm,其中单元P(i,j)是两个元素C(i)和C(j)的交点。 一般来说,我可以使用两个for循环来实现这一点,但是我的数据非常大,我想知道是否有任何方法可以加快计算速度? 第一个想法是替换单元数组,其

我有一个两个单元数组R和C(两个向量有R(n个元素),C(m个元素)),我的任务是比较R的每个元素和R的每个元素,比较C的每个元素和C的每个元素。比较是找到两个单元的交点。结果我想得到两个矩阵。一个矩阵Q表示R nxn,其中单元Q(i,j)是两个元素R(i)和R(j)的交点,第二个矩阵P表示C mxm,其中单元P(i,j)是两个元素C(i)和C(j)的交点。 一般来说,我可以使用两个for循环来实现这一点,但是我的数据非常大,我想知道是否有任何方法可以加快计算速度? 第一个想法是替换单元数组,其中每个单元中都有我想要比较的行(向量R)或列(向量C)的索引(二进制矩阵BM的行和列,BM是输入数据)。所以如果
R(1)={2 3 4}
,并且BM是5x5,那么
R(1,:)=[0 1 1 1 0]
。现在有了这个二进制矩阵R,我可以用一个循环比较每一行和每一行。但我仍然需要回到行数,例如

R(1,:) = [0 1 1 1 0];
R(2,:) = [0 1 1 0 0]; %then 
Q(1,2) = [0 1 1 0 0]; %(intersection of element R(1) and R(2)) and

C(1,:) = [1 1 0 0 0]; 
C(2,:) = [1 0 0 1 0]; %then
P(1,2) = [1 0 0 0 0]; % Now I want to obtain 
Results(i,j) = sum(BM(Q(1,2),P(1,2)))=sum(BM([2 3],[1]));
你知道如何处理这个问题,并且在没有两个循环的情况下比较单元格数组的两个向量吗?

因为
Q(k,l)
是带有numCols的向量(在你的例子中是5),它不能存储在二维矩阵
Q
Q
应该是二维单元格数组,或者是三维矩阵

直接使用二进制矩阵获得
Q
(行交点):

现在,
Q(k,l:)
保持
BM
k
-th行和
l
-th行之间的交点

这同样适用于
P

>> P = bsxfun( @times, permute( BM, [3 2 1] ), permute( BM, [2 3 1] ) );
由于
Q(k,l)
是带有numCols(在您的示例中为5)的向量,因此它不能存储在二维矩阵
Q
Q
应该是二维单元数组或三维矩阵

直接使用二进制矩阵获得
Q
(行交点):

现在,
Q(k,l:)
保持
BM
k
-th行和
l
-th行之间的交点

这同样适用于
P

>> P = bsxfun( @times, permute( BM, [3 2 1] ), permute( BM, [2 3 1] ) );

如果所有输入数据向量具有相同的维度,则不需要单元数组。你宁愿使用矩阵,因为矩阵更快更容易操作。不幸的是,向量的维数不同。我想如果我用二进制向量{1 1 0 0 1}替换单元{1 2 5},(元素的索引等于1,表示单元中的元素),我会加快计算速度,因为所有的计算都是在矩阵上进行的,但数据太大,导致内存不足错误。如果所有输入数据向量的维数相同,你不需要细胞阵列。你宁愿使用矩阵,因为矩阵更快更容易操作。不幸的是,向量的维数不同。我想如果我用二元向量{1 1 0 0 1}替换单元{1 2 5},(元素的索引等于1,表示单元中的元素),我会加快计算速度,因为所有的计算都是在矩阵上进行的,但数据太大,导致内存不足错误。当然你是对的!我将bsxfun应用于我的数据集,但它太大了,以至于杀死了matlab(我有一个内存不足错误)。无论如何,谢谢你的提示,在其他情况下,这将非常有帮助。@karolina如果你尽可能详细地介绍你的数据,这样提供的答案会更有帮助。当然你是对的!我将bsxfun应用于我的数据集,但它太大了,以至于杀死了matlab(我有一个内存不足错误)。无论如何,谢谢你的提示,在其他情况下,这将非常有帮助。@karolina如果你尽可能详细地介绍你的数据,这将非常有帮助,这样提供的答案会更有帮助。