0

这是 Octave 文档的第 6.3.1 节从单元阵列生成的逗号分隔列表中的一个示例(我通过docOctave 提示符上的命令浏览了它),我不太明白。

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看起来像:

in =
{
  [1,1] =
     10 20 30 40 50 60 70 80 90
  [1,2] = Inf
  [1,3] = last
  [1,4] = first
}

看起来out像:

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用 3 个输出参数调用(如果我将它们称为输出参数有误,请原谅我,我对 Octave 很陌生)[out{1:3}],它表示单元格数组的前 3 个空单元格out

当我find(in{1 : 3})使用 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看起来确实如此,但是当我执行时in{1:3},我得到:

ans = 10 20 30 40 50 60 70 80 90
ans = Inf
ans = last

它们是元in胞数组的第 1 到第 3 个元素。

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

谢谢你。

4

1 回答 1

1

文档应该可以find帮助您回答您的问题:

当使用 3 个输出参数调用时,find返回非零元素的行和列索引(即你的iand j)和一个包含非零值的向量(即你的k)。这解释了 3 个输出参数,但不能解释为什么它只考虑in{1}. 要回答这个问题,您需要查看将 3 个输入参数传递给findas时会发生什么find (x, n, direction)

如果给出三个输入,则方向应该是“第一个”或“最后一个”之一,分别只请求第一个或最后n 个索引。但是,索引始终按升序返回。

in{1}您的x(如果需要,您的数据)也是如此,应该考虑in{2}多少个索引find(在您的情况下所有这些索引in{2} = Inf)以及{in3}是否find应该找到向量的第一个或最后一个索引in{1}(在您的情况下是最后一个)。

于 2013-10-07T08:57:51.750 回答