如果我有一个16x12 double
的矩阵,我怎么能在循环的每次迭代中提取3个集合中的列?
e.g。在循环的第一次迭代期间,采用第1列:第3列:
A=
2 3 0 2 3 0 1 3 1 3 0 0
7 7 1 8 7 0 6 6 0 8 8 1
4 3 0 3 2 0 3 3 0 3 2 0
12 12 0 11 10 0 13 14 0 17 10 0
5 6 0 5 2 0 5 5 0 4 2 0
3 3 0 4 1 0 4 3 0 2 1 0
6 14 0 8 11 0 8 9 0 8 5 0
2 8 0 7 3 0 5 5 0 4 4 0
4 4 0 3 2 0 5 7 0 5 3 0
5 6 1 6 4 0 7 2 0 4 8 1
5 7 1 5 5 0 4 13 0 4 5 0
8 8 0 8 9 0 8 9 0 10 5 0
7 9 0 9 6 0 9 8 1 9 4 0
8 4 1 9 2 0 6 7 1 7 2 0
11 10 0 8 11 1 9 9 0 11 6 0
8 10 1 8 10 0 6 11 0 7 9 0
i = 1
2 3 0
7 7 1
4 3 0
12 12 0
5 6 0
3 3 0
6 14 0
2 8 0
4 4 0
5 6 1
5 7 1
8 8 0
7 9 0
8 4 1
11 10 0
8 10 1
i = 2
2 3 0
8 7 0
3 2 0
11 10 0
5 2 0
4 1 0
8 11 0
7 3 0
3 2 0
6 4 0
5 5 0
8 9 0
9 6 0
9 2 0
8 11 1
8 10 0
等等。
我只知道如何以复杂的方式做到这一点,指定每次迭代的列,即
for i=1:size(A,2)/3
if i == 1
array = A(:,1:3);
elseif i == 2
array = A(:,4:6);
elseif i == 3
array = A(:,7:9);
elseif i == 4
array = A(:,10:12);
else
end
end
然而,这不允许在不改变每次的情况下进行不同长度的调节。是否有简洁的方式来实现这一目标?
答案 0 :(得分:2)
有几种方法可以做到这一点。 我认为最简单的方法是使用迭代变量,每次增加三次。
>> A = [2 3 0 2 3 0 1 3 1 3 0 0
7 7 1 8 7 0 6 6 0 8 8 1
4 3 0 3 2 0 3 3 0 3 2 0
12 12 0 11 10 0 13 14 0 17 10 0]
A =
2 3 0 2 3 0 1 3 1 3 0 0
7 7 1 8 7 0 6 6 0 8 8 1
4 3 0 3 2 0 3 3 0 3 2 0
12 12 0 11 10 0 13 14 0 17 10 0
>> for i=1:3:12
A(:,i:i+2)
end
ans =
2 3 0
7 7 1
4 3 0
12 12 0
ans =
2 3 0
8 7 0
3 2 0
11 10 0
ans =
1 3 1
6 6 0
3 3 0
13 14 0
ans =
3 0 0
8 8 1
3 2 0
17 10 0
类似的方法是使用一个增加1的变量,每次选择3*i-2
到3*i
列。
破坏性方法,无需计数器,可以运行
B = A(:,1:3)
A(:,1:3) = []
每次尝试。这会将前三列复制到B,然后从A中删除它们。
答案 1 :(得分:1)
以下代码一次迭代SELECT
'Contact 1' AS "Phone 2 - Type",
s1.Emerg_Phone_1 AS "Phone 2 - Value",
'Contact 2' AS "Phone 3 - Type",
s1.Emerg_Phone_2 AS "Phone 3 - Value",
'Student Cell' AS "Phone 4 - Type",
s2.STUDENTCELL AS "Phone 4 - Value",
FROM
STUDENTS s1 INNER JOIN STUDENTS2 s2 ON s1.student_id=s2.student_id
列的data
列:
3
<强>输出强>
data = [2 3 0 2 3 0 1 3 1 3 0 0;
7 7 1 8 7 0 6 6 0 8 8 1;
4 3 0 3 2 0 3 3 0 3 2 0;
12 12 0 11 10 0 13 14 0 17 10 0];
cols = size(data,2);
per_iteration = 3;
for k=1:per_iteration:cols
selected = data(:,k:(k-1)+per_iteration);
disp(selected);
end