in octave/matlab, have:
all = { [1,1] = 1 [1,2] = 2 [1,3] = 3 [1,4] = 4 [1,5] = 5 [1,6] = 6 [1,7] = 7 [1,8] = 8 [1,9] = 9 [1,10] = ten } = { [1,1] = someword [1,2] = someword [1,3] = 1 [1,4] = someword [1,5] = 9 }
how make new matrix such that
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 }
that is, new
matrix has same size all
matrix, values either 1
or 0
, depending on whether words in some
exist in all
?
easily for-loop:
new = cell(size(all)); v=1:length(all) if any(strcmp(some,all{v})) new{v}=1; else new{v}=0; end end
alternatively, use intersect:
[isect, index_all, index_some]=intersect(all,some);
if don't need new values cell (for 0 or one, there's no reason not use simple array), easy:
new=zeros(size(all)); new(index_all)=1;
if need them cell reason, use:
new=num2cell(new);
ps: should't use all
variable name - inbuilt matlab function, , overwriting variable, cannot use until clear variable.
Comments
Post a Comment