如何在MATLAB中循环两个向量?

时间:2014-08-10 04:18:31

标签: matlab loops for-loop octave

在python中,可以使用zip循环多个向量或enumerate来获取循环向量的当前索引,如此

one = ['A', 'B', 'C']
two = [1, 2, 3]

for i, j in zip(one, two):
    print i, j

for j, i in enumerate(one):
    print i, two[j]

给出

>>> 
A 1
B 2
C 3
A 1
B 2
C 3

在MATLAB中可以做到

one = {'A' 'B' 'C'};
two = [1 2 3];

for i = 1:1:length(one)
  printf('%s %i\n', one{i}, two(i));
endfor

j = 1;
for i = one
  printf('%s %i\n', i{1}, two(j));
  j = j + 1;
endfor

A 1
B 2
C 3
A 1
B 2
C 3

这两个选项中的一个是人们在MATLAB中如何做到这一点的常用方法,i。即循环遍历几个向量"并行"还是有另一种,也许是更好的方式?

加成:

two = [1 2 3];
two = [1, 2, 3];

这两行都在上层MATLAB程序中提供相同的输出。差异是什么?

1 个答案:

答案 0 :(得分:1)

在Matlab中使用printffprintf非常好。第一种方法的Matlab代码是

one = {'A' 'B' 'C'};
two = [1 2 3];

for ii = 1:length(one)
  fprintf('%s %i\n', one{ii}, two(ii));
end

还可以将字符串放入单元格数组中,而不需要任何for循环。

s = cellfun(@(a,b) [a,' ',b], one', ...
    arrayfun(@num2str, two', 'UniformOutput', false),....
    'UniformOutput', false)

奖金:

>> A = [1;2;3]   
A =
     1
     2
     3
>> A = [1 2 3]   
A =
     1     2     3
>> A = [1,2,3]   
A =
     1     2     3
>> A = [1,2,3;4 5 6;7,8 9]
A =
     1     2     3
     4     5     6
     7     8     9
>> 

奖金2:

使用ij是不好的。见 - Using i and j as variables in Matlab