对于非数值型数据,是否有bsxfun等效项?
例如,我想要比较存储在两个cell-array中的所有字符串对:
>> a = {'aa', 'bb', 'cc'};
>> b = {'dd', 'aa'};
>> bsxfun( @strcmp, a, b' ); % not working for cells :-(发布于 2013-06-14 00:24:52
我喜欢Rody's solution,但你也可以这样做:
ia=(1:length(a)).'; ib=1:length(b);
a=a(:);
bsxfun(@(ii,jj) strcmp( a(ii),b(jj) ) ,ia, ib);发布于 2013-06-14 00:13:30
怎么样
[str,ia,ib] = intersect(a,b)发布于 2013-06-14 08:39:24
正如错误消息所说,广播只适用于数值类型。以下是其他可能的替代方案:
a = {'aa', 'bb', 'cc'};
b = {'dd'; 'aa'};
%# obviously doesnt work
%#bsxfun(@strcmp, a, b)
%# do the singleton expansion ourselves
strcmp(repmat(a,size(b)), repmat(b,size(a)))
%# if you dislike REPMAT, we can use Tony's trick
strcmp(a(ones(size(b)),:), b(:,ones(size(a))))
%# we could also use CELLFUN
cell2mat(cellfun(@(s)strcmp(a,s), b, 'UniformOutput',false))https://stackoverflow.com/questions/17090047
复制相似问题