if difference between two values is smaller than replace by
8 次查看(过去 30 天)
显示 更早的评论
I have a vector that contains several time values. For the application I need to check if the difference between two values is smaller than 3e-6. If that's the case the second (higher) value shall be replaced with the first.
My approach would be for-loops but maybe there is a smarter and more efficient way to solve this?
5 个评论
the cyclist
2023-10-22
Is each column processed independently?
It doesn't seem that any value is greater than the immediately preceding value by less than 3.e-6, but more than zero:
load("time.mat","time")
any((diff(time) > 0) & (diff(time) < 3.e-6),"all")
Walter Roberson
2023-10-22
编辑:Walter Roberson
2023-10-22
load("time.mat","time")
dt = diff(time);
dt = dt(dt ~= 0);
min(dt)
So in all cases where the difference in times is < 3e-6, the two values are already identical.
采纳的回答
Pratyush
2023-10-23
Hi Kai,
I understand that you have a vector, and if the difference between any two values is less than 3e-6, you want to set them both equal to the lesser of the two numbers. The following script could be used for that purpose:
% Sort timeValues vector
timeValues = sort(timeValues);
% Calculate the differences between adjacent values
diffValues = diff(timeValues);
% Find the indices where the differences are smaller than 3e-6
replaceIndices = find(diffValues < 3e-6);
% Replace the second value with the first for the identified indices
timeValues(replaceIndices + 1) = timeValues(replaceIndices);
Hope this helps.
1 个评论
Dyuman Joshi
2023-10-23
Note that this answer sorts the data before finding difference between consecutive elements.
OP has/had not specified anything in regards to that.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!