我有一个数据集,我要在其中提取1-3,7-9,13-15列,一直到矩阵的末尾
作为一个例子,我使用标准魔术函数来创建矩阵
A =魔法(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:结束)
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等)。
有没有办法在不必手动指出所有列号的情况下执行此操作?
感谢您的帮助! 拉斯穆斯
答案 0 :(得分:11)
这就是你要找的东西:
Aex = A(:,[1:3 7:9])
答案 1 :(得分:0)
我假设您希望将结果全部连接到另一个大矩阵中?
如果是这种情况,请尝试使用此尺寸:
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
是“group”(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
我没有检查其中任何一个的速度,但我认为第一个可能更快。您可能希望将其拆分为术语以使其更具可读性,我只是将其设置为单行(这并不总是编写代码的最佳方式)。
答案 2 :(得分:0)
执行此操作的简单方法:
M = magic(10);
n = size(M,2)
idx = sort([1:3:n 2:3:n 3:3:n])
M(:,idx)
但是,如果删除模式比您希望保留的colums模式更简单,则可以使用它:
A = magic(10);
B = A;
B(:,4:3:end)=[];
B(:,4:3:end)=[]; %Yes 3x the same line of code.
B(:,4:3:end)=[];