我不明白为什么我找不到任何明确的答案!这么基本的事情......
我有一个普通的2D矩阵,比如这个:
matrix = zeros(w, h);
w, h ∈ Z+
,w
和h
的正整数大于零。
我需要遍历矩阵并使用它的元素做一些事情。对于此任务,我们可以假设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_CONVERSION
是varargin
函数,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将其标记为不正确的语法:
赋值语句对多个值进行赋值,但是 分配右侧的表达式似乎没有出现 产生多个价值观。
答案 0 :(得分:2)
第一段代码就是让你工作的代码。但是,您的for
循环不正确。您可能希望迭代所有列,因此请for i = 1 : size(test,2)
,而不是test
。 size(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