【问题标题】:Find, diff function in c#C#中的查找,差异函数
【发布时间】:2015-07-13 09:04:28
【问题描述】:

我在 Matlab 脚本中有一堆代码,我想将其转换为 c#。更具体地说,我的基本问题如下:

X= find(diff(S>0.5) ==1); //greater than the threshold
Y= find(diff(S<0.5)==1);  // lower than the threshold

事实上,当信号开始取大于 0.5 的值时(按递增顺序),我想在实时信号中进行搜索。如何在 c# 中转换这一行?

我的信号是这样的:

我想实时发现我的信号开始取值大于和小于图中标记的某些阈值的时间。为了做到这一点,我使用 diff 函数来找到这些点。首先 (S >0.5) 返回一个与 S 大小相同的向量,其中包含逻辑值,如果 S 大于 0.5 则为 1 或相反为零。如果向量的前一个值相同,则该向量的差返回 0,如果前一个值为 0,则返回 0,而当前值为 1,则为 -1。因此 find 在这种情况下,“==1”按升序返回信号大于阈值的所有点。我将信号的值实时存储在列表部分中:

parts.Add(this.confidence);

我想在此列表中找到信号通过 0.25 阈值的位置。任何的想法?

【问题讨论】:

  • 您自己尝试过什么吗?使用for 循环试一试,如果遇到问题,请返回代码
  • 我很难找到差异化的东西。
  • 也许这就是您要找的东西? msdn.microsoft.com/en-us/library/vstudio/…
  • @JoseRamon 不要尝试为diff 寻找东西,它在概念上非常简单。只需自己在循环中实现它。请记住,C# 不是 Matlab,循环是 C# 中惯用且正确的方式。目前,您的代码要求某人推荐一个与本论坛无关的工具或库。证明您尝试过自己编写代码,并就实际代码的问题提出问题。
  • 线路有什么作用?很可能存在等效的 LINQ,但您需要先向我们 C# 人员解释您的代码。

标签: c# matlab find diff


【解决方案1】:

当信号的值大于 1 的升序时,我想在信号中进行搜索

假设您的信号是double 的,并且您有一些它们的集合:

var signals = new List<double> { ... };

然后您可以创建这些信号的子集,其中值 > 1 按升序排列:

var filteredOrderedSignals = from signal in signals 
                             where signal > 1.0 orderby signal ascending 
                             select signal;

这可能不是您所需要的,但会让您走上正确的道路。

【讨论】:

  • OP 的 Matlab 代码暗示他们想要大于 1 的元素的位置,而不是前一个元素(不是我鼓励你为OP编写此代码,只是指出这并不能回答问题)
猜你喜欢
  • 1970-01-01
  • 2012-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多