我想找到包含另一个矩阵的指定元素的矩阵行。
例如,a=[1 2 3 4 5 6 7]
和b=[1 2 0 4;0 9 10 11;3 1 2 12]
。现在,我想找到b
的行,其中包含至少三个a
元素。为此,我使用bsxfun
命令如下:
c=find(sum(any(bsxfun(@eq, b, reshape(a,1,1,[])), 2), 3)>=3);
它适用于低维矩阵但是当我想将它用于高维矩阵时,例如,当b
的行数为192799
时,MATLAB会出现以下错误:
Requested 192799x4x48854 (35.1GB) array exceeds maximum array size preference.
Creation of arrays greater than this limit may take a long time and cause MATLAB
to become unresponsive. See array size limit or preference panel for more information.
是否还有其他命令可以执行此任务而不会产生上述高维矩阵的行为?
答案 0 :(得分:2)
可能的解决方案:
a=[1 2 3 4 5 6 7]
b=[1 2 0 4;0 9 10 11;3 1 2 12]
i=ismember(b,a)
idx = sum(i,2)
idx = find(idx>=3)