octave:在单元格数组{}下标上使用find()并将其分配给另一个单元格数组

时间:2013-10-07 03:48:44

标签: octave

这是章节6.3.1从Octave文档的单元格数组生成的逗号分隔列表中的示例(我通过Octave提示符上的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

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

当我使用3个输出参数运行find(in{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看起来如此,但当我执行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}逗号分隔列表中的第2和第3个条目?

谢谢。

1 个答案:

答案 0 :(得分:1)

find documentation应该可以帮助您回答问题:

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

  

如果给出三个输入, direction 应该是“first”之一或   “last”,分别仅请求第一个或最后一个 n 索引。   但是,索引总是按升序返回。

所以in{1}是您的x(您的数据,如果您愿意),in{2}find应该考虑多少个指数(自{{{}}以来所有指数1}})和in{2} = Inf{in3}是否应该找到向量find的第一个或最后一个索引(在您的情况下为最后一个)。