Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 在一系列值中查找一个值_Matlab_Indexing_Match - Fatal编程技术网

Matlab 在一系列值中查找一个值

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等。由于试验不是连续的,一些不良扫描可能不是试验的一部分 考

我有72个试验的数据,有些试验可用,有些不可用。试验开始和结束由两个单元格指定“第一次扫描”(即试验的第一次扫描)和“最后一次扫描”(试验的最后一次扫描)。因此,第一次扫描是一个72x1单元(值为1152546等)。最后一次扫描也是一个72x1单元(值为102338等)。试验有不同的长度,并且不是连续的。现在,我有另一个名为Bad_scans的单元格,其中包含不可用的扫描。这是一个nx1细胞,其值如1415162638等。由于试验不是连续的,一些不良扫描可能不是试验的一部分

考虑到所有这些,我想知道下面这些糟糕的\u扫描是哪些试验(如果它们确实属于试验)。坏_扫描如果在试验的开始和结束扫描之间,则属于试验。例如,按照前面的示例,扫描14不属于任何试验。第二次和第三次不良\u扫描是15次,和16次,因此属于试验2次。第四次扫描属于第三次试验。我如何获得哪些试验包含不良扫描的摘要


谢谢大家!

这里有一些东西可能会有所帮助;为了便于论证,我使用长度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
包含不正确的扫描。

你们试过什么?你能包括一些代码吗?雅达,雅达