如何在两个值之间查找数据

时间:2014-05-08 15:17:36

标签: string matlab user-interface matrix

我试图找到两个值之间的数据。我在GUI程序中使用此代码,您可以在代码的前一部分中的2个列表框中选择您在下面的代码中看到的starting_value和ending_value。

% --- Executes on button press in CalculateIntensity.
function CalculateIntensity_Callback(hObject, eventdata, handles)
% hObject    handle to CalculateIntensity (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% Trapz function
starting_value = getappdata(0,'StartValue');
ending_value = getappdata(0,'EndValue');
StartingValue = str2mat(starting_value)
EndingValue = str2mat(ending_value)
A = getappdata(0,'XYarray')
data_found = A(A(:,[1,2]) > StartingValue & A(:,[1,2]) < EndingValue)  

我找到了帮助:
http://www.mathworks.com/matlabcentral/answers/8556-how-to-find-vector-elements-between-two-values-efficiently
然而

data_found = A(A(:,[1,2]) > StartingValue & A(:,[1,2]) < EndingValue)      

部分代码对我不起作用,我认为starting_value和ending_value是字符串,所以我尝试将其转换为矩阵,但我得到错误:
使用&lt;
时出错 矩阵尺寸必须一致。
MichelleLaycockGUImainwindow中的错误&gt; CalculateIntensity_Callback(第119行)
data_found = A(A(:,[1,2])&gt; StartingValue&amp; A(:,[1,2])&lt; EndingValue)

使用的数据示例是:
A =

1.0e + 03 *

0.1660    1.1570
0.1664    0.4650
0.1668         0
0.1672    1.0200
0.1676    1.0110
0.1680    1.0200
0.1684    1.0640
0.1688    1.1100
0.1692    1.0370
0.1696    1.0050
0.1700    1.0750
0.1704    1.0850
0.1708    1.1310
0.1712    1.0630
0.1716    1.0370
0.1719    1.1070
0.1724    1.1450   

我不确定我哪里出错了,任何帮助都会非常感激,因为我需要完成我的工作。提前致谢!

1 个答案:

答案 0 :(得分:0)

由于我的数据中的某些值不同而不仅仅是减少或增加大于或等于我最初尝试使用的方法不起作用。因此,不是使用循环来获取所选择的两个点之间的数据,而是采用了不同的方法。

我使用[~,indx1]=ismember(StartingValue,A,'rows')找到所选数据的行号,然后使用此信息提取所选数据之间的数据。
以下是我用来执行此操作的完整代码:

starting_value = getappdata(0,'StartValue');
ending_value = getappdata(0,'EndValue');
StartingValue = str2num(starting_value);
EndingValue = str2num(ending_value);

A = getappdata(0,'XYarray');
[~,indx1]=ismember(StartingValue,A,'rows');
[~,indx2]=ismember(EndingValue,A,'rows');
arrayfortrapz = A(indx1:indx2,1:2); %array of data including and between selected data   

我希望这对任何可能遇到类似问题的人有所帮助。