【问题标题】:How to loop two vectors in MATLAB?如何在MATLAB中循环两个向量?
【发布时间】:2014-08-10 04:18:31
【问题描述】:

在 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 中的常用方法,即。 e.循环遍历多个向量“并行”还是有其他更好的方法?

奖金:

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

这两行在上面的 MATLAB 程序中给出了相同的输出。有什么区别?

【问题讨论】:

  • 您想在A1B2 之间使用两个“空格”等等,还是用其他东西作为它们之间的分隔符?顺便说一句,我认为 MATLAB 没有 printf 或者有吗?
  • @Divakar 好的,它是八度代码(因为 matlab 太 exp 不能在家里使用),但基本上我在工作中使用 matlab。无论如何,这不是关于打印功能,而是关于循环的最佳方式。在我看来,第一个选项是一个不错的选择,然后只需使用 i 作为索引来访问向量、列表或其他任何内容的元素..
  • 好的,没关系。那么分隔符呢?
  • @divakar 不确定我说得对。分隔符(打印时)由printf 中的字符串给出。我想知道的是是否使用, 或空格作为[] 之间的分隔符都给出向量?也许这是一个八度特定的东西。
  • 嗯,你正在使用 printf('%s %i\n'..), so it seem there is "one space" between printing one` 和 two 元素。如果您使用printf('%s:%i\n',则使用: 作为分隔符。所以,我的问题是 - 你想要打印的分隔符是什么?

标签: matlab loops for-loop octave


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 2019-09-16
    • 1970-01-01
    相关资源
    最近更新 更多