我正在尝试使用 Matlab 编写一个清理数据的程序。该程序接受数据的最大值和最小值,并丢弃小于最小值或大于最大值的数据。清洁部分似乎有一个小问题。这种情况仅在被检查变量的最小范围为 0 时发生。如果是这种情况,出于某种原因,程序不会丢弃介于 0 和 -1 之间的数据点。我一直在尝试解决此问题一段时间,并注意到这是发生这种情况的唯一情况,如果您尝试运行 SQL 查询选择 < 0 的数据,它将遗漏 0 到 - 1,与发生在我身上的错误一样有效。想知道是否有人会认识到这一点并知道它可能是什么。
问问题
230 次
5 回答
4
-1
小于0
,所以0
应该是max
值。如果是这种情况,它将在您对清洁操作的定义-1
之间保留点:0
并抛出小于最小值或大于最大值的数据。
如果你想扔掉(使用上面的定义)
介于 0 和 -1 之间的数据点
那么你需要设置0
为min
值和-1
值max
---这是没有意义的。
另外,我认为你的意思是
并抛出小于最小值且大于最大值的数据。
于 2010-07-26T17:18:17.943 回答
4
我会写这样一个函数:
function data = cleanseData(data, limits)
limits = sort(limits);
data = data( limits(1) <= data & data <= limits(2) );
end
一个示例用法:
a = rand(100,1)*10;
b = cleanseData(a, [-2 5]);
c = cleanseData(a, [0 -1]);
于 2010-07-26T19:09:26.267 回答
1
可能是在比较之前浮点数被转换为整数。我不知道 matlab,但是在 python int(-0.5)==0 中,这可以解释额外的数据点进入。你可以通过将 min 设置为 -1 来测试它,如果你也从 -1 获取值到 -2 那么你需要确保没有进行投射。
于 2010-07-26T17:40:51.637 回答
0
如果我尝试使用 SQL 模拟您的情况,并针对1.00, 0.00, -0.20, -0.80. -1.00, -1.20 and -2.00
SomeVal 列中的数据表运行以下查询,它会正确返回-0.20 and -0.80
,这是预期的。
SELECT SomeVal
FROM SomeTable
WHERE (SomeVal < 0) AND (SomeVal > - 1)
MatLab 也是如此。也许您的代码中有错误。用您自己的 SELECT 语句检查上述语句,看看是否有问题。
于 2010-07-26T17:22:38.150 回答
0
如果您执行类似的操作,我可以想象这样的错误
minimum = 0
if minimum and value < minimum
于 2010-07-26T17:26:00.317 回答