我有一个数据集,我想在其中提取列1-3、7-9、13-15,一直到矩阵的末尾
作为示例,我使用标准的魔术函数创建了一个矩阵
A=magic(10)
A=
92 99 1 8 15 67 74 51 58 40
98 80 7 14 16 73 55 57 64 41
4 81 88 20 22 54 56 63 70 47
85 87 19 21 3 60 62 69 71 28
86 93 25 2 9 61 68 75 52 34
17 24 76 83 90 42 49 26 33 65
23 5 82 89 91 48 30 32 39 66
79 6 13 95 97 29 31 38 45 72
10 12 94 96 78 35 37 44 46 53
11 18 100 77 84 36 43 50 27 59我知道我可以使用以下命令以3为间隔从1开始提取单个列:
Aex=a(:,1 :3: end)
Aex =
92 8 74 40
98 14 55 41
4 20 56 47
85 21 62 28
86 2 68 34
17 83 49 65
23 89 30 66
79 95 31 72
10 96 37 53
11 77 43 59假设我想提取列组(例如,列1-3、7-9等)。
有没有一种方法可以做到这一点,而不必手动指出所有的列号?
谢谢你的帮忙!Rasmus
发布于 2012-04-13 18:43:46
这就是你要找的吗:
Aex = A(:,[1:3 7:9])发布于 2012-04-13 19:17:21
我假设您希望将所有结果连接到另一个大矩阵中?
如果是这样的话,试试这个的大小:
result = A(diag(0:2)*ones(3,floor((size(A,2) - 3)/6) + 1) + ...
ones(3,floor((size(A,2) - 3)/6) + 1)*diag(1:6:(size(A,2)-3)))这可能可以通过一些矩阵数学规则来缩短。您还可以对这些值进行参数化,以便可以对其进行修改,以完成比此问题所期望的更多的工作(而且可能更有意义),
a = 3;
b = 6;
result = A(diag(0:a-1)*ones(a,floor((size(A,2) - a)/b) + 1) + ...
ones(a,floor((size(A,2) - a)/b) + 1)*diag(1:b:(size(A,2)-a)))其中a是“组”的大小(length([1 2 3]) = length([7 8 9]) = ... = 3)等,b是列间距(在您的示例中为[1...7...13...])
如果您想将它们分开,我将它们放在这里的单元格中,但它们可以转到您需要的任何位置:
a = 3;
b = 6;
results = {};
for Cols = 1:b:(size(A,2)-a)
results{end+1} = A(:, Cols:(Cols+2));
end我没有检查这两个的速度,但我认为第一个可能更快。您可能希望将其拆分成多个术语,以便更具可读性,我这样做只是为了适合一行(这并不总是编写代码的最佳方式)。
发布于 2014-01-30 18:01:18
做到这一点的简单方法:
M = magic(10);
n = size(M,2)
idx = sort([1:3:n 2:3:n 3:3:n])
M(:,idx)但是,如果删除模式比您想要保留的列模式更简单,则可以使用以下代码:
A = magic(10);
B = A;
B(:,4:3:end)=[];
B(:,4:3:end)=[]; %Yes 3x the same line of code.
B(:,4:3:end)=[];https://stackoverflow.com/questions/10139243
复制相似问题