Matlab 在一系列值中查找一个值
我有72个试验的数据,有些试验可用,有些不可用。试验开始和结束由两个单元格指定“第一次扫描”(即试验的第一次扫描)和“最后一次扫描”(试验的最后一次扫描)。因此,第一次扫描是一个72x1单元(值为1、15、25、46等)。最后一次扫描也是一个72x1单元(值为10、23、38等)。试验有不同的长度,并且不是连续的。现在,我有另一个名为Bad_scans的单元格,其中包含不可用的扫描。这是一个nx1细胞,其值如14,15,16,26,38等。由于试验不是连续的,一些不良扫描可能不是试验的一部分 考虑到所有这些,我想知道下面这些糟糕的\u扫描是哪些试验(如果它们确实属于试验)。坏_扫描如果在试验的开始和结束扫描之间,则属于试验。例如,按照前面的示例,扫描14不属于任何试验。第二次和第三次不良\u扫描是15次,和16次,因此属于试验2次。第四次扫描属于第三次试验。我如何获得哪些试验包含不良扫描的摘要Matlab 在一系列值中查找一个值,matlab,indexing,match,Matlab,Indexing,Match,我有72个试验的数据,有些试验可用,有些不可用。试验开始和结束由两个单元格指定“第一次扫描”(即试验的第一次扫描)和“最后一次扫描”(试验的最后一次扫描)。因此,第一次扫描是一个72x1单元(值为1、15、25、46等)。最后一次扫描也是一个72x1单元(值为10、23、38等)。试验有不同的长度,并且不是连续的。现在,我有另一个名为Bad_scans的单元格,其中包含不可用的扫描。这是一个nx1细胞,其值如14,15,16,26,38等。由于试验不是连续的,一些不良扫描可能不是试验的一部分 考
谢谢大家! 这里有一些东西可能会有所帮助;为了便于论证,我使用长度3而不是72:
first_scans={1;2;9};
last_scans={3;4;5};
bad_scans={4;7};
fs=cell2mat(first_scans);
ls=cell2mat(last_scans);
bs=cell2mat(bad_scans);
trials=cat(2,fs,ls);
bad_trials=zeros(0,0);
for i=1:size(trials,1)
if any(ismember(bs,trials(i,:)))
bad_trials=cat(2,bad_trials,i);
end
end
disp(bad_trials)
请尝试以下操作:这将在每对开始/结束值上循环,并确定是否有任何值出现在错误扫描列表中。以“矢量化”的方式编写此方法是可能的,但这会牺牲清晰度——而且只需72次扫描,性能损失就不值得费心编写难以理解的代码
bad_runs = cell(1,72);
containsBad = zeros(1,72);
bad_scans = cell2array(bad_scans);
for ii = 1:72
temp = First_scans{ii}:Last_scans{ii};
containsBad = (numel(intersect(temp, bad_scans))>0);
end
包含错误扫描的所有扫描的摘要:
disp(find(containsBad));
假设:
First_scans = {1; 15; 25; 46}
Last_scan = {10; 23; 38; 50}
Bad_scans = {14; 15; 16; 26; 38}
你可以这样做:
find(arrayfun(@(x) any(First_scans{x} <= [Bad_scans{:}] & Last_scan{x} >= [Bad_scans{:}]), 1:numel(First_scans)))
ans =
2 3
find(arrayfun(@(x)any(First_scans{x}=[Bad_scans{:}]),1:numel(First_scans)))
ans=
2 3
这意味着试验
2
和3
包含不正确的扫描。你们试过什么?你能包括一些代码吗?雅达,雅达