在Matlab中使用索引和值循环的简洁方法

And*_*eas 8 matlab

我的很多循环看起来像这样:

items = [3,14,15,92];
for item_i = 1:numel(items)
    item = items(item_i);
    % ...
end
Run Code Online (Sandbox Code Playgroud)

这对我来说有点乱.是否有一些循环结构让我循环遍历项目并同时携带索引?

我正在寻找一种符合for item_i as item = items或的语法for [item_i item] = items.

gra*_*tnz 7

与克里斯泰勒的答案类似,你可以这样做:

function [ output ] = Enumerate( items )
output = struct('Index',num2cell(1:length(items)),'Value',num2cell(items));
end


items = [3,14,15,92];
for item = Enumerate(items)
   item.Index
   item.Value
end
Run Code Online (Sandbox Code Playgroud)

枚举函数需要更多的工作才能成为通用目的,但这是一个开始,并且适用于您的示例.

这对于小向量是可以的,但是你不希望用任何大小的向量来做这个,因为性能会是一个问题.


Chr*_*lor 5

我相信没有办法做到这一点.我已经在过去使用的技巧是利用这一点Matlab的循环通过这样的事实的矩阵,那么你可以定义一个函数enumerate,增加了索引列的矩阵的顶部:

function output = enumerate(x)
   output = [1:size(x,2); x];
end
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它:

for tmp = enumerate(items)
    index = tmp(1);
    item  = tmp(2:end);
end
Run Code Online (Sandbox Code Playgroud)

但这并不比你原来做的更好.如果像Python那样你可以这么好

for [index,item] = enumerate(items)
    # loop body
end
Run Code Online (Sandbox Code Playgroud)

where enumerate函数返回两个相同长度的矩阵,但是......你不能.