首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对非数值型数据使用`bsxfun`

对非数值型数据使用`bsxfun`
EN

Stack Overflow用户
提问于 2013-06-13 22:45:46
回答 3查看 858关注 0票数 5

对于非数值型数据,是否有bsxfun等效项?

例如,我想要比较存储在两个cell-array中的所有字符串对:

代码语言:javascript
复制
>> a = {'aa', 'bb', 'cc'};
>> b = {'dd', 'aa'};
>> bsxfun( @strcmp, a, b' ); % not working for cells :-(
EN

回答 3

Stack Overflow用户

发布于 2013-06-14 00:24:52

我喜欢Rody's solution,但你也可以这样做:

代码语言:javascript
复制
ia=(1:length(a)).'; ib=1:length(b);
a=a(:);
bsxfun(@(ii,jj) strcmp(  a(ii),b(jj) )  ,ia, ib);
票数 4
EN

Stack Overflow用户

发布于 2013-06-14 00:13:30

怎么样

代码语言:javascript
复制
[str,ia,ib] = intersect(a,b)
票数 2
EN

Stack Overflow用户

发布于 2013-06-14 08:39:24

正如错误消息所说,广播只适用于数值类型。以下是其他可能的替代方案:

代码语言:javascript
复制
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))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17090047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档