我有一系列坐标(i,j),我想遍历每一个坐标。
例如
A = ones(3,3);
i = [1 2 3];
j = [3 2 1];
我试过这个,但它不起作用:
for (i = i && j = j)
A(i,j) = 0;
end
我也试过这个但是它按预期工作了:
for i = i
for j = j
A(i,j) = 0;
end
end
期望的结果:
A =
1 1 0
1 0 1
0 1 1
虽然此示例中A
是一个矩阵,但我正在处理表数据。
答案 0 :(得分:3)
执行所需操作的正确语法是:
A = ones(3,3);
i = [1 2 3];
j = [3 2 1];
for ii = 1:length( i )
A( i(ii) , j(ii) ) = 0;
end
基本上,您使用i
循环遍历每个元素并相应地索引j
和ii
。 ii
遍历1..3索引每个元素。
这将给出下面的最终结果。
>> A
A =
1 1 0
1 0 1
0 1 1
虽然这有效并且可以解决您的问题,但如果您没有涉及更复杂的操作,我建议rayryeng's alternate solution进行转换。
答案 1 :(得分:2)
虽然这并没有回答你关于for
循环的问题,但我会避免一起使用循环并创建列主线性索引来访问你的矩阵。使用sub2ind
来帮助实现这一目标。 sub2ind
会获取相关矩阵的大小,行位置和列位置。输出将是一个值数组,用于指定要在矩阵中访问的列主要位置。
因此:
A = ones(3); i = [1 2 3]; j = [3 2 1]; %// Your code
%// New code
ind = sub2ind(size(A), i, j);
A(ind) = 0;
鉴于您有一个表,您可以将表转换为数组,在此数组上应用sub2ind
,然后在完成后将结果转换回表。 table2array
和array2table
是有用的工具。鉴于您的表格存储在A
中,您可以尝试:
Atemp = table2array(A);
ind = sub2ind(size(Atemp), i, j);
Atemp(ind) = 0;
A = array2table(Atemp);