Octave 倍频程:对单元格数组{}下标使用find()并将其分配给另一个单元格数组

Octave 倍频程:对单元格数组{}下标使用find()并将其分配给另一个单元格数组,octave,Octave,这是第6.3.1节逗号分隔列表中的一个示例,该列表是从倍频程文档的单元格数组生成的(我通过倍频程提示符上的doc命令浏览了该列表),我不太理解 in{1} = [10, 20, 30, 40, 50, 60, 70, 80, 90]; in{2} = inf; in{3} = "last"; in{4} = "first"; out = cell(4, 1); [out{1:3}] = find(in{1 : 3}); % line which I do not understand 因此,在

这是第6.3.1节逗号分隔列表中的一个示例,该列表是从倍频程文档的单元格数组生成的(我通过倍频程提示符上的
doc
命令浏览了该列表),我不太理解

in{1} = [10, 20, 30, 40, 50, 60, 70, 80, 90];
in{2} = inf;
in{3} = "last";
in{4} = "first";
out = cell(4, 1);
[out{1:3}] = find(in{1 : 3}); % line which I do not understand
因此,在本节末尾,我们在中看到了如下内容:

in =
{
  [1,1] =
     10 20 30 40 50 60 70 80 90
  [1,2] = Inf
  [1,3] = last
  [1,4] = first
}
out =
{
  [1,1] =
    1 1 1 1 1 1 1 1 1
  [2,1] =
    1 2 3 4 5 6 7 8 9
  [3,1] =
    10 20 30 40 50 60 70 80 90
  [4,1] = [](0x0)
}
out
看起来像:

in =
{
  [1,1] =
     10 20 30 40 50 60 70 80 90
  [1,2] = Inf
  [1,3] = last
  [1,4] = first
}
out =
{
  [1,1] =
    1 1 1 1 1 1 1 1 1
  [2,1] =
    1 2 3 4 5 6 7 8 9
  [3,1] =
    10 20 30 40 50 60 70 80 90
  [4,1] = [](0x0)
}
在这里,
find
是用
[out{1:3}]
中的3个输出参数调用的(请原谅,如果我调用它们的输出参数是错误的,我对倍频程非常陌生),它表示单元数组
out
的前3个空单元

当我使用3个输出参数运行
find(在{1:3})
时,如:

[i,j,k] = find(in{1 : 3})
我得到:

i = 1  1  1  1  1  1  1  1  1
j = 1  2  3  4  5  6  7  8  9
k = 10 20 30 40 50 60 70 80 90
这解释了为什么
out
看起来是这样,但是当我在{1:3}中执行
时,我得到:

ans = 10 20 30 40 50 60 70 80 90
ans = Inf
ans = last
这是单元数组中
的第1到第3个元素

我的问题是:
find(in{1:3})
为什么要在{1:3}
中的
的逗号分隔列表中删除第二个和第三个条目

谢谢。

for
查找
将帮助您回答问题:

使用3个输出参数调用时,
find
返回非零元素(即
i
j
)的行和列索引,以及包含非零值的向量(即
k
)。这解释了3个输出参数,但并不是为什么它只考虑{1}
中的
。要回答这个问题,您需要查看将3个输入参数传递给
find
时发生的情况,如
find(x,n,direction)

如果给出三个输入,则方向应为“第一个”或“第二个” “last”,仅分别请求第一个或最后n个索引。 但是,索引总是按升序返回

< {>代码> > { 1 } /代码>是您的<代码> x <代码>(您的数据,如果您想要),<代码> { 2 } /代码>应考虑多少索引<代码>查找<代码> >(所有这些在您的情况下,因为代码> {{ 2 }=INF < /代码>)和<代码> {IN3}是<代码>查找< /C> >是否在{ 1 } <代码>中找到向量<代码>的第一个或最后一个索引(最后在您的情况下)