基本上,假设我有一个随机数列表: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
等等。...
基本上我想要下一个数字和当前数字之间的差异,并以此作为我的步骤。
基本上,假设我有一个随机数列表: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
等等。...
基本上我想要下一个数字和当前数字之间的差异,并以此作为我的步骤。
由于您的列表位于单元格中,因此您可以使用
for idx = cell2mat(x)
disp(idx)
end
我不确定您要查找的内容是否存在于 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
对于 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
这在之前已经介绍过了。我现在留下我的答案,以防你一开始就想要矢量的东西。