【问题标题】:How can I properly loop through a simple 2D matrix?如何正确循环遍历简单的 2D 矩阵?
【发布时间】:2015-02-28 23:06:49
【问题描述】:

我不明白为什么我找不到任何明确的答案!这么基本的东西……

我有一个普通的二维矩阵,比如这个:

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 将其标记为不正确的语法:

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

【问题讨论】:

  • 我更新了问题,谢谢。 Here's full code。我不想让这个问题不必要地冗长。
  • 没问题。谢谢。我去看看。

标签: matlab matrix


【解决方案1】:

第一段代码是让它工作所需的。但是,您的 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

【讨论】:

  • 我的函数定义为function [a,b,c] = MY_CONVERSION(varargin)。这个返回向量是 3 个值还是 3 个值?
  • 它将单独返回三个值。我看了你的代码,所以我们很好。我正在更新我的答案。
【解决方案2】:

首先,matrix = zeros(w, h); 造成混淆:您可能认为 w 是宽度,h 是高度。但是zeros的第一个参数是高度:比如zeros(2,3)

 0     0     0
 0     0     0

通常:行索引在前,列索引在后。

那么你有for i = 1:test 但 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    相关资源
    最近更新 更多