【问题标题】:Can someone tell me what this function actually does?有人能告诉我这个功能实际上是做什么的吗?
【发布时间】:2016-03-17 08:38:40
【问题描述】:

您好,我是 MATLAB 新手,我想知道这个函数实际上是做什么的。该函数是从上一个问题中复制的,该问题帮助我解决了查找连续数字频率的问题。

链接: Series of consecutive numbers (different lengths)

d=[3 2 4 2 2 2 3 5 1 1 2 1 2 2 2 2 2 9 2]
q = diff([0 d 0] == 2);
v = find(q == -1) - find(q == 1);

【问题讨论】:

  • 给出向量中连续2's的数量,v= 1 3 1 5 1

标签: matlab vector


【解决方案1】:

让我们一步一步来。

你有一个数组d:

d=[3 2 4 2 2 2 3 5 1 1 2 1 2 2 2 2 2 9 2]

然后你就申请了

q = diff([0 d 0] == 2);

这是[0 d 0] == 2 的导数。基本上它取所有为 2 的数字的导数。[0 d 0] == 2 的结果是:

0 0 1 0 1 1 1 0 0 0 0 1 0 1 1 1 1 1 0 1 0

你可以看到,只要原始向量中有一个 2,它就有一个 1,它在乞求时有一个 0,最后是一个 0。如果我们通过q = diff([0 d 0] == 2) 对它求导:

q =

     0 1 -1 1 0 0  -1 0 0 0 1 -1 1 0 0 0 0 -1 1 -1

当原始向量中的 2 出现时,您得到 1,消失时得到 -1。最后一行分别找到 1 和 -1 并减去它们出现的索引,这样你现在可以知道它们之间有多少个数字。由于 1 表示“数字 2 开始”,-1 表示“连续没有数字 2”,这将为您提供连续 2 序列的长度。

v = find(q == -1) - find(q == 1);

v=
    1     3     1     5     1

一开始有一个2,然后是一连串的3个2,然后又是一个,然后是5个,中间被一个9隔开,最后一个来了。

【讨论】:

  • 查找功能完成了什么?如果我将 2 个查找功能分开为:我使用 v = find(q == -1) x = find(q == 1) 其中 v = 3 7 12 18 20 和 x = 2 4 11 13 19 这些值在哪里从哪里来?
  • 查找非零项的索引。你可以用谷歌搜索 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-16
  • 2021-12-08
  • 1970-01-01
  • 2021-12-26
  • 1970-01-01
  • 1970-01-01
  • 2017-09-07
相关资源
最近更新 更多