-1

基本上,假设我有一个随机数列表:x = {3,5,6,7,8,11,13,14,16,22,25}.
我想遍历这些数字,但我希望我的索引实际上是每个数字。所以如果我这样做了:

for i = x{1} : x{length(x)}

    disp(i);

我希望我i成为3, 然后5, 然后6, 7, 8, 11,13等等。...
基本上我想要下一个数字和当前数字之间的差异,并以此作为我的步骤。

4

3 回答 3

2

由于您的列表位于单元格中,因此您可以使用

for idx = cell2mat(x)
    disp(idx) 
end
于 2013-07-01T15:23:10.780 回答
0

我不确定您要查找的内容是否存在于 matlab 中。我会做的:

for j = 1:x{size(x,2)}
  disp(x{j}); % or any other processing,
  % % you can also set i=x{j} and do what you wanted to do with i.
end
于 2013-07-01T15:16:54.887 回答
-1

对于 vector x,如果你想创建一个新的 vector result,其中的ith元素result是 的x(i)th元素x,那么你可以使用:

result = x(x);

这相当于:

result = zeros(length(x));
for i = 1:numel(x)
    index = x(i);
    result(i) = x(index);
end

但这应该快得多。这对于矢量化代码并使其运行得更快可能很有用。但是,如果您需要遍历元素(并且最好在 MATLAB 中尽可能避免循环),您可以使用:

for i = 1:numel(x)
    disp(x(x(i)))
end

这有点令人费解,但有效。

一个警告:你必须确保没有任何元素x超过 的尺寸x,否则你会得到一个错误。此外, 的每个元素x都必须是整数。

编辑:上述方法适用于向量,这就是我最初解释您的问题的方式。对于单元阵列,您的选择似乎更加有限。我找不到比使用更快的方法:

index = zeros(numel(x),1);
for i = 1:numel(x)
    index(i) = x{i};
end

这在之前已经介绍过了。我现在留下我的答案,以防你一开始就想要矢量的东西。

于 2013-07-01T15:19:13.293 回答