在for循环

时间:2015-09-07 23:09:18

标签: matlab

我需要在MATLAB中创建一个for循环,用一个单独的列向量来划分矩阵中的每一列。我只想在矩阵中选择列而不是所有列。

这就是我想要做的,其中Indexes是一个19x1的整数向量(不是所有连续的数字),big_matrix是82x24,other_column是82x1:

matrix_to_fill = zeros(82,length(Indexes));
for x = Indexes
    new_column = big_matrix(:,x)./other_column;
    new_index = find(Indexes==x);
    matrix_to_fill(:,new_index) = new_column;
end

当我运行时,我收到以下错误:

Error using  ./ 
Matrix dimensions must agree.

我可以单独运行每次迭代而不会出错,所以我知道矩阵维度是一致的。更重要的是,如果我将索引键入为矢量,它可以正常工作:

matrix_to_fill = zeros(82,length(Indexes));
for x = [1,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,23]
    new_column = big_matrix(:,x)./other_column;
    new_index = find(Indexes==x);
    matrix_to_fill(:,new_index) = new_column;
end

我认为" x =索引"语法很好,因为我已经使用以下方法测试过:

for x = Indexes
    disp(x)
end

所以我完全难过了。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

问题在于您对for循环的定义。当你说你认为“x =索引”语法是正确的时,你就没有足够的观察力来看它是不正确的。

您需要的是

for x = Indexes'
% Do your looping
end

请注意上面的转置。

如果你这样做

for x = Indexes
    disp(x)
end

然后循环执行一次,x取整个矢量的值。

如果你这样做

for x = Indexes'
    disp(x)
end

然后x将采用矩阵的各个元素,每次循环显示19个标量。