Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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
Arrays Matlab。使用isequal比较数组的动态大小_Arrays_Matlab_Dynamic_Unique_Equality - Fatal编程技术网

Arrays Matlab。使用isequal比较数组的动态大小

Arrays Matlab。使用isequal比较数组的动态大小,arrays,matlab,dynamic,unique,equality,Arrays,Matlab,Dynamic,Unique,Equality,我有一个包含许多温度分布的数据集。其中一些记录在同一位置,包含不同的数据,但不幸的是,有时会有重复的配置文件。我想消除重复的数据,而不删除在同一位置完成的、不重复的配置文件。为了做到这一点,我循环了每年的数据,并检查该年内所有配置文件的位置是否唯一。然后,如果在同一位置发现两个或多个,我想检查这些轮廓是否相等。问题出现在某些年份没有任何相同位置的配置文件,而某些年份可能有2个、3个或更多。我不知道如何在循环中使用“isequal”并更改要比较的数组数。以下是对代码的一个改编: % Data &g

我有一个包含许多温度分布的数据集。其中一些记录在同一位置,包含不同的数据,但不幸的是,有时会有重复的配置文件。我想消除重复的数据,而不删除在同一位置完成的、不重复的配置文件。为了做到这一点,我循环了每年的数据,并检查该年内所有配置文件的位置是否唯一。然后,如果在同一位置发现两个或多个,我想检查这些轮廓是否相等。问题出现在某些年份没有任何相同位置的配置文件,而某些年份可能有2个、3个或更多。我不知道如何在循环中使用“isequal”并更改要比较的数组数。以下是对代码的一个改编:

% Data
>> profiles
    profiles = 

    1x3864 struct array with fields:
    position
    time
    temperature

>> size(years)    % Vector with each profile's time
    3864 1

>> size(position) % Vector with each profile's position
    3864 1

for ii=2000:2012   % Looping over years 2000 to 2012
    year_index=find(years==ii);               % Find profiles within each year
    [C,Ia,Ic]=unique(position(year_index));   % Find unique positions

    if length(Ia)~=length(Ic)                 % If there are repeated values

        for ij=1:length(Ia)                   % Loop over singlets
            repeated_index=year_index(Ic==ij) % Indexes of each position value

            if length(repeated_index)>1       % If it is a repeated value
            % Here is where I want to assess the equality

            if isequal(profiles(repeated_index).temperature)
            profiles(repeated_index(2:end))=NaN;
            end

            % However there aren't enough input arguments, sometimes it will 
            % be just a pair, and sometimes it will be up to 6 different 
            profiles to compare

            end
        end
    end
end
那么,我如何在循环中使用
isequal
,而不知道每次需要使用多少输入?作为提示,
length(repeated_index)
告诉我们每次有多少,但是如何构造一个动态的
isequal
代码行呢

我的目标是只保留每个复制集的一部分,并保留所有不同的配置文件以进行更多检查

谢谢。请随时询问更多信息或澄清。
(很抱歉,这是一个新手,不知道如何正确格式化代码片段)

您能用伪代码写下您希望isequal做什么吗?我发现很难理解你想要的是什么。我在主帖子中添加了更多的代码。这些是添加的行:
如果相等(配置文件(重复索引)。温度);剖面图(重复_指数(2:结束))=NaN;结束
因此基本上评估同一位置内的所有配置文件,如果它们是相同的数据,只需保留其中一个配置文件并删除REST。如果我正确理解了问题,您希望使用可变数量的输入参数调用isequal()。是这样吗?我不确定我是否理解,但你不能按照
的思路做点什么吗?如果a==NaN&&b==NaN&&c==NaN
,也就是说,制作一些单独的等位术语,并将它们与
操作符链接起来?如果重复的索引包含多个值(不是标量),那么配置文件(重复的索引).温度将返回“逗号分隔列表”。现有的代码很好,可以传递给isequal()。示例:s(1).a=5s(2).a=10s(3).a=0等质量(s.a)%3个值比较