Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.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
Performance MATLAB中查找()的快速替代方法_Performance_Matlab_Optimization - Fatal编程技术网

Performance MATLAB中查找()的快速替代方法

Performance MATLAB中查找()的快速替代方法,performance,matlab,optimization,Performance,Matlab,Optimization,我正在尝试编写(一个高效的)MATLAB代码,该代码实现以下功能: 我有大约100000个二维数据点,我有成对的间隔。第一个间隔不变(在本例中为0到1之间),第二个间隔不断变化。 我希望获得具有以下内容的实例/数据点: 1) 第一个间隔(0,1)内的x坐标值 2) 秒内的y坐标值(更改间隔) %firstCol是一个约100000行、一列的数组;横坐标 %secondCol也是一个约100000行、一列的数组;y坐标 %我第一次间歇的界限 % maxOfMyFirstInval=1; minOf

我正在尝试编写(一个高效的)MATLAB代码,该代码实现以下功能:

我有大约100000个二维数据点,我有成对的间隔。第一个间隔不变(在本例中为0到1之间),第二个间隔不断变化。
我希望获得具有以下内容的实例/数据点:

1) 第一个间隔(0,1)内的x坐标值
2) 秒内的y坐标值(更改间隔)

%firstCol是一个约100000行、一列的数组;横坐标
%secondCol也是一个约100000行、一列的数组;y坐标
%我第一次间歇的界限
%
maxOfMyFirstInval=1;
minOfMyFirstInterval=0;
%allIntervalsMax是一个约10000行、一列的最大值
%allIntervalsMin是一个约10000行、一列的最小值
% 
%上面的两列包含变化对,因此第一对是
%(所有间隔最小值(1),所有间隔最大值(1))
%
%预分配将容纳满足以下条件的数据点数量的数组
%我的状况
%
numberOfInstances=0(长度(allIntervalsMax),1);
抽搐
%这将得到满足我的第一个条件的实例,
%0和1之间的x坐标
%
a_first=find((firstCol=minOfMyFirstInterval));
%循环浏览第二个间隔的列表
%
对于jx=1:长度(allIntervalsMax)
a_second=find((secondCol=allIntervalsMin(jx));
a_两者=相交(a_第一,a_第二);
numberOfInstances(jx)=长度(a_);
结束
toc

完成这项工作所需的时间约为29秒,我想知道是否有更快的方法。

如果不费心查找和相交,您可能会加快速度。所以

a_first = (firstCol <= maxOfMyFirstInterval) & ...
    (firstCol >= minOfMyFirstInterval);

% Loop through the list of second intervals
%
for jx = 1:length(allIntervalsMax)

    a_second = (secondCol <= allIntervalsMax(jx)) & ...
        (secondCol >= allIntervalsMin(jx));

    a_both = a_first & a_second;

    numberOfInstances(jx) = sum(a_both);
end
a_first=(firstCol=minOfMyFirstInterval);
%循环浏览第二个间隔的列表
%
对于jx=1:长度(allIntervalsMax)
a_second=(secondCol=allIntervalsMin(jx));
a_tware=a_first&a_second;
numberOfInstances(jx)=和(a_两者);
结束

替换
find
产生了很大的不同,而
intersect
没有那么大的区别。非常感谢。
a_first = (firstCol <= maxOfMyFirstInterval) & ...
    (firstCol >= minOfMyFirstInterval);

% Loop through the list of second intervals
%
for jx = 1:length(allIntervalsMax)

    a_second = (secondCol <= allIntervalsMax(jx)) & ...
        (secondCol >= allIntervalsMin(jx));

    a_both = a_first & a_second;

    numberOfInstances(jx) = sum(a_both);
end