在Octave / MATLAB中,我说:
all =
{
[1,1] = one
[1,2] = two
[1,3] = three
[1,4] = four
[1,5] = five
[1,6] = six
[1,7] = seven
[1,8] = eight
[1,9] = nine
[1,10] = ten
}
some =
{
[1,1] = someword
[1,2] = someword
[1,3] = one
[1,4] = someword
[1,5] = nine
}
我如何制作一个新矩阵
new =
{
[1,1] = 1
[1,2] = 0
[1,3] = 0
[1,4] = 0
[1,5] = 0
[1,6] = 0
[1,7] = 0
[1,8] = 0
[1,9] = 1
[1,10] = 0
}
也就是说,new
矩阵与all
矩阵的大小相同,但值为1
或0
,具体取决于some
中的字词{1}}中存在{1}}
答案 0 :(得分:2)
使用
new = ismember(all, some);
这将返回一个数组。但如果你想在单元格数组中使用
new = num2cell(ismember(all, some));
然而,正如Hugh Nolan在他的回答中所提到的,通常一个好主意是避免将all
等内置函数的名称作为变量名。
答案 1 :(得分:1)
轻松使用for循环:
new = cell(size(all));
for v=1:length(all)
if any(strcmp(some,all{v}))
new{v}=1;
else
new{v}=0;
end
end
或者,您可以使用intersect:
[isect, index_all, index_some]=intersect(all,some);
如果您不需要将新值作为单元格(对于零或一,没有理由不使用简单数组),那么这很容易:
new=zeros(size(all));
new(index_all)=1;
如果由于某种原因需要将它们作为单元格,请使用:
new=num2cell(new);
PS:你不应该使用all
作为变量名 - 它是一个内置的Matlab函数,并且通过用变量覆盖它,在清除变量之前不能使用它。