为什么 ismember 在我的 Matlab 程序中不能正常工作?
Why ismember doesn't work properly in my program in Matlab?
在我程序的这一部分,我想将 ID 变量分配给 RealTagID 变量。然后在第二部分中,我尝试将 ID 变量分配给 RealTagID_NEW。 ID 变量来自我的测量数据,我已经在下面上传了它(它来自 EPC)。它没有按我想要的方式工作,因为 Matlab 9B 和 BB 在第一部分出于某种原因是相同的...
这是我的代码:
close all
clc
RealTagID=['A3 ' ;'A1 ' ; '9F ' ;'9D ' ; '9B ' ; 'A9 ' ; 'A7 ' ; 'A5 ' ];
%The last two characters of the EPC code of the tags
RealPOSX=[40 31 0 -31 -40 -32 0 +31];
%The x positions of fixed tags
RealPosY=[0 27 40 27 0 -27 -40 -27];
% The y positions of fixed tags
for i=1:length(XLocalization)
temp=Epc{i};
ID(i,:)=temp(end-2:end);
%Makes a new variable, called 'ID', which is the last two characters from
%the measured EPC codes
end
for i =1 :length(RealPOSX)
idx = all(ismember(ID,RealTagID(i,:)),2)
pos=find(idx==1);
POS{i}=pos;
end
%-------------------------------------------------------------------------------------------------------------------------------
RealPOSX_NEW=[20 17 0 -17 -20 -17 0 17];
%The x positions of fixed tags
RealPosY_NEW=[0 12 20 12 0 -12 -20 -12];
% The y positions of fixed tags
RealTagID_NEW=['B3 ' ;'B5 ' ; 'B7 ' ;'BB ' ; 'AD ' ; 'AB ' ; 'AF ' ; 'B1 ' ];
%The last two characters of the EPC code of the tags
for i =1 :length(RealPOSX_NEW)
idxx = all(ismember(ID,RealTagID_NEW(i,:)),2)
poss=find(idxx==1);
POSS{i}=poss;
end
第二部分更值得。对于那种情况下的 matlab,B1 等于 BB,B3 等于 BB,B5 等于 BB,B7 等于 BB,AB 等于 BB。
我想比较它们,如果它们相同,那么逻辑上是1,如果不是,那么逻辑上是0。但是它不是那样工作的,因为这个BB变量或者我不知道。
我正在使用 ismember 函数,但它似乎不是最佳选择。任何的想法?我应该使用什么?
所以我的目标是使 POS 和 POSS 变量相等,这意味着它们都应该是一个 1x8 单元格并且每个单元格有 58 个元素。现在其中一些有 116 个,因为在那种情况下,对于 matlab BB 也等于 9B、B1、B3、B5、B7、B9。所以这样不好,BB 应该只与 BB 相等,而不是与其他变量相等。
这是我的测量结果Measurement
我希望你能帮助我,我花了一天的时间没有任何进展。
最后我用strfind
解决了。
这是我的代码,它运行良好。
close all
clc
RealPOSX=[40 31 1 -31 -40 -32 1 +31];
%The x positions of fixed tags
RealPosY=[1 27 40 27 1 -27 -40 -27];
% The y positions of fixed tags
RealTagID=['A3 ' ;'A1 ' ; '9F ' ;'9D ' ; '9B ' ; 'A9 ' ; 'A7 ' ; 'A5 ' ];
for i=1:length(XLocalization)
temp=Epc{i};
ID(i,:)=temp(end-2:end);
end
for i =1 :length(RealPOSX)
idx = strfind(string(ID), RealTagID(i,:))
pos= find(not(cellfun('isempty', idx)))
POS{i}=pos;
end
%-------------------------------------------------------------------------------------------------------------------------------
RealPOSX_NEW=[20 17 0 -17 -20 -17 0 17];
%The x positions of fixed tags
RealPosY_NEW=[0 12 20 12 0 -12 -20 -12];
% The y positions of fixed tags
RealTagID_NEW=['B3 ' ;'B5 ' ; 'B7 ' ;'BB ' ; 'AD ' ; 'AB ' ; 'AF ' ; 'B1 ' ];
%The last two characters of the EPC code of the tags
for i =1 :length(RealPOSX)
%idxx = all(ismember(ID,RealTagID_NEW(i,:)),2)
%poss=find(idxx==1);
idxx = strfind(string(ID), RealTagID_NEW(i,:))
poss= find(not(cellfun('isempty', idxx)))
POSS{i}=poss;
在我程序的这一部分,我想将 ID 变量分配给 RealTagID 变量。然后在第二部分中,我尝试将 ID 变量分配给 RealTagID_NEW。 ID 变量来自我的测量数据,我已经在下面上传了它(它来自 EPC)。它没有按我想要的方式工作,因为 Matlab 9B 和 BB 在第一部分出于某种原因是相同的...
这是我的代码:
close all
clc
RealTagID=['A3 ' ;'A1 ' ; '9F ' ;'9D ' ; '9B ' ; 'A9 ' ; 'A7 ' ; 'A5 ' ];
%The last two characters of the EPC code of the tags
RealPOSX=[40 31 0 -31 -40 -32 0 +31];
%The x positions of fixed tags
RealPosY=[0 27 40 27 0 -27 -40 -27];
% The y positions of fixed tags
for i=1:length(XLocalization)
temp=Epc{i};
ID(i,:)=temp(end-2:end);
%Makes a new variable, called 'ID', which is the last two characters from
%the measured EPC codes
end
for i =1 :length(RealPOSX)
idx = all(ismember(ID,RealTagID(i,:)),2)
pos=find(idx==1);
POS{i}=pos;
end
%-------------------------------------------------------------------------------------------------------------------------------
RealPOSX_NEW=[20 17 0 -17 -20 -17 0 17];
%The x positions of fixed tags
RealPosY_NEW=[0 12 20 12 0 -12 -20 -12];
% The y positions of fixed tags
RealTagID_NEW=['B3 ' ;'B5 ' ; 'B7 ' ;'BB ' ; 'AD ' ; 'AB ' ; 'AF ' ; 'B1 ' ];
%The last two characters of the EPC code of the tags
for i =1 :length(RealPOSX_NEW)
idxx = all(ismember(ID,RealTagID_NEW(i,:)),2)
poss=find(idxx==1);
POSS{i}=poss;
end
第二部分更值得。对于那种情况下的 matlab,B1 等于 BB,B3 等于 BB,B5 等于 BB,B7 等于 BB,AB 等于 BB。
我想比较它们,如果它们相同,那么逻辑上是1,如果不是,那么逻辑上是0。但是它不是那样工作的,因为这个BB变量或者我不知道。
我正在使用 ismember 函数,但它似乎不是最佳选择。任何的想法?我应该使用什么?
所以我的目标是使 POS 和 POSS 变量相等,这意味着它们都应该是一个 1x8 单元格并且每个单元格有 58 个元素。现在其中一些有 116 个,因为在那种情况下,对于 matlab BB 也等于 9B、B1、B3、B5、B7、B9。所以这样不好,BB 应该只与 BB 相等,而不是与其他变量相等。
这是我的测量结果Measurement
我希望你能帮助我,我花了一天的时间没有任何进展。
最后我用strfind
解决了。
这是我的代码,它运行良好。
close all
clc
RealPOSX=[40 31 1 -31 -40 -32 1 +31];
%The x positions of fixed tags
RealPosY=[1 27 40 27 1 -27 -40 -27];
% The y positions of fixed tags
RealTagID=['A3 ' ;'A1 ' ; '9F ' ;'9D ' ; '9B ' ; 'A9 ' ; 'A7 ' ; 'A5 ' ];
for i=1:length(XLocalization)
temp=Epc{i};
ID(i,:)=temp(end-2:end);
end
for i =1 :length(RealPOSX)
idx = strfind(string(ID), RealTagID(i,:))
pos= find(not(cellfun('isempty', idx)))
POS{i}=pos;
end
%-------------------------------------------------------------------------------------------------------------------------------
RealPOSX_NEW=[20 17 0 -17 -20 -17 0 17];
%The x positions of fixed tags
RealPosY_NEW=[0 12 20 12 0 -12 -20 -12];
% The y positions of fixed tags
RealTagID_NEW=['B3 ' ;'B5 ' ; 'B7 ' ;'BB ' ; 'AD ' ; 'AB ' ; 'AF ' ; 'B1 ' ];
%The last two characters of the EPC code of the tags
for i =1 :length(RealPOSX)
%idxx = all(ismember(ID,RealTagID_NEW(i,:)),2)
%poss=find(idxx==1);
idxx = strfind(string(ID), RealTagID_NEW(i,:))
poss= find(not(cellfun('isempty', idxx)))
POSS{i}=poss;