通过匹配尽可能接近的非相同数字来过滤 table 行 Matlab
Filter table rows Matlab by matching non-identical numbers as close as possible
这可能比我目前的方法更简单,所以欢迎任何建议!
我有一个 MATLAB table (38327x17) char
/double
变量从 .csv 导入,readtable()
,double
从 char
。 col 2 中的 double
变量是采样率约为 0.02 秒的时间点,看起来有点像这样:
char double char char char etc.
x 1.0088 y w z
x 1.0218 y w e
x 1.1017 w y z
x 1.1287 w q z
我还有一个时间点向量 (238x1),采样率为 2.531 秒:
[0; 2.531; 5.062; 7.593; ...]
我想通过向量过滤 table,有效地对 table 时间点进行下采样,即通过与向量中每个时间点最匹配的时间点提取 table 的 238 行。
期望的结果是:
char double char char char etc.
x 0 y w z
x 2.7816 y w e
x 5.0607 w y z
x 7.6064 w q z
(其中值尽可能接近向量,但由于采样间隔不匹配,它们并不完全匹配)。我尝试了 resample()
和 downsample()
但没走多远。我可以逐行遍历 csv 文件并进行字符串匹配,但似乎效率低下。
您可以最小化两个时间向量之间的“外部差异”(有更好的名称吗?),大小:
% Create example data
v=(0:60).'*2.531; %column vector
M=(1:ceil(v(end)/0.49))*0.49;
chars='a':'z';
M=table( repmat('x',[numel(M) 1]), M.', chars(mod(randperm(numel(M)),numel(chars))+1).', ...
'VariableNames', {'char1', 'double1', 'char2'} );
% Find desired rows
[~,idx]=min(abs( M.double1 - v.' )); %relies on implicit expansion
M(idx,:),
在您的情况下,具有差异的临时矩阵为 38327 x 238,或大约 70 MB,因此该算法应该没问题。
这可能比我目前的方法更简单,所以欢迎任何建议!
我有一个 MATLAB table (38327x17) char
/double
变量从 .csv 导入,readtable()
,double
从 char
。 col 2 中的 double
变量是采样率约为 0.02 秒的时间点,看起来有点像这样:
char double char char char etc.
x 1.0088 y w z
x 1.0218 y w e
x 1.1017 w y z
x 1.1287 w q z
我还有一个时间点向量 (238x1),采样率为 2.531 秒:
[0; 2.531; 5.062; 7.593; ...]
我想通过向量过滤 table,有效地对 table 时间点进行下采样,即通过与向量中每个时间点最匹配的时间点提取 table 的 238 行。
期望的结果是:
char double char char char etc.
x 0 y w z
x 2.7816 y w e
x 5.0607 w y z
x 7.6064 w q z
(其中值尽可能接近向量,但由于采样间隔不匹配,它们并不完全匹配)。我尝试了 resample()
和 downsample()
但没走多远。我可以逐行遍历 csv 文件并进行字符串匹配,但似乎效率低下。
您可以最小化两个时间向量之间的“外部差异”(有更好的名称吗?),大小:
% Create example data
v=(0:60).'*2.531; %column vector
M=(1:ceil(v(end)/0.49))*0.49;
chars='a':'z';
M=table( repmat('x',[numel(M) 1]), M.', chars(mod(randperm(numel(M)),numel(chars))+1).', ...
'VariableNames', {'char1', 'double1', 'char2'} );
% Find desired rows
[~,idx]=min(abs( M.double1 - v.' )); %relies on implicit expansion
M(idx,:),
在您的情况下,具有差异的临时矩阵为 38327 x 238,或大约 70 MB,因此该算法应该没问题。