我需要在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
所以我完全难过了。任何帮助将不胜感激!
答案 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个标量。