如何正确循环一个简单的二维矩阵?

时间:2015-02-28 23:06:49

标签: matlab matrix

我不明白为什么我找不到任何明确的答案!这么基本的事情......

我有一个普通的2D矩阵,比如这个:

matrix = zeros(w, h);

w, h ∈ Z+wh的正整数大于零。

我需要遍历矩阵并使用它的元素做一些事情。对于此任务,我们可以假设h=3。因此,我试过这个:

        test = zeros(w, 3);
        for i = 1:test
            point = test(:,i);
            [point(0), point(1), point(2)] = MY_CONVERSION(point(0), point(1),point(2));
            test(:,i) = point;
        end

MY_CONVERSIONvarargin函数,3个参数定义为:

function [rho, alpha, z] = MY_CONVERSION(r, alpha, epsilon) 

当然,在实际代码中,test包含数据,而不仅仅是零。但是,例如,这个代码可以用随机数填充矩阵。但它不起作用。

我还尝试使用三个变量来存储列值:

        for i = 1:Xi
            [a,b,c] = Xi(:,i);
            [a,b,c] = mysph2cyl(a, b, c);
            rho(:,i) = a,b,c;
        end

Matlab将其标记为不正确的语法:

  

赋值语句对多个值进行赋值,但是   分配右侧的表达式似乎没有出现   产生多个价值观。

2 个答案:

答案 0 :(得分:2)

第一段代码就是让你工作的代码。但是,您的for循环不正确。您可能希望迭代所有,因此请for i = 1 : size(test,2),而不是testsize(test,2)确定矩阵的列数。

因此:

    test = zeros(w, 3);
    for i = 1:size(test,2) %// Change here
        point = test(:,i);
        [point(0), point(1), point(2)] = MY_CONVERSION(point(0), point(1),point(2));
        test(:,i) = point;
    end

另外,你的第二段代码,你需要解决我上面提到的for循环问题。 for循环中的第一个语句是多余的。你不需要它。第三行代码需要[]围绕a,b,c

答案 1 :(得分:1)

首先,matrix = zeros(w, h);会产生混淆:你可能会认为w是宽度,h是高度。但zeros的第一个参数是高度:例如,zeros(2,3)

 0     0     0
 0     0     0

一般来说:行索引优先,列索引秒。

然后你有for i = 1:test但测试是一个矩阵。你需要一个号码。

这是一个类似于你的第一个片段的工作示例:

w = 2; h =3;        
test = zeros(w, h);
for i = 1:h
    point = test(:,i);
    point = cos(point)*i;  % sample conversion
    test(:,i) = point;
end

输出:

1     2     3
1     2     3