如何在MATLAB中创建子矩阵
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在MATLAB中创建子矩阵相关的知识,希望对你有一定的参考价值。
我有这项工作,我必须通过从给定的数据集创建一个子矩阵。我将在下面解释。
假设,我的数据集如下:
100 200 300 400 500 600
101 201 301 401 501 601
102 202 302 402 502 602
所以,我想创建如下的子矩阵:
对于第一次迭代 - >
[[101 201 301 401 501]
[102 202 302 402 502]]
和
[[601]
[602]]
对于第二次迭代 - >
[[100 200 300 400 500]
[102 202 302 402 502]]
和
[[600]
[602]]
依此类推......该过程将持续到主/起始矩阵中的行数。
简而言之,我想要一个LOO(留一个)实现这个数据集,以便我可以进一步开展它。
如果你们有任何关于如何做的想法,请分享。 :)
答案
假设A
是主矩阵,a1
和a2
将是你的第一组子矩阵,而b1
和b2
将是第二组子矩阵。
>> A=[100 200 300 400 500 600
101 201 301 401 501 601
102 202 302 402 502 602];
>> a1=A(2:3,1:5)
a1 =
101 201 301 401 501
102 202 302 402 502
>> a2=A(2:3,6)
a2 =
601
602
>> b1=A(1:2,1:5)
b1 =
100 200 300 400 500
101 201 301 401 501
>> b2=A(1:2,6)
b2 =
600
601
另一答案
正确的索引是你的朋友。对于给定的矩阵:
X = [
100 200 300 400 500 600
101 201 301 401 501 601
102 202 302 402 502 602
];
第一个子集是:
S1A = X(2:3,1:end-1);
S1B = X(2:3,end);
第二个子集是:
S2A = X(1:3,1:end-1);
S2B = X(1:3,end);
由于您要对矩阵的所有两行组合执行此操作,因此可以使用nchoosek function生成索引模式的行,如下所示:
X_seq = 1:numel(x);
idx = nchoosek(X_seq,2);
然后,通过迭代(只是为了简单起见......在Matlab中通常建议尽可能多地计算矢量化),您可以提取所有匹配:
idx_len = size(idx,1);
res = cell(idx_len,2);
for i = 1:idx_len
idx_curr = idx(i,:);
res(i,:) = {X(idx_curr,1:end-1) X(idx_curr,end)};
end
另一答案
如果你有统计数据和ML工具箱,那么你可以使用他们的内置交叉验证功能。见cvpartition
或crossvalind
以上是关于如何在MATLAB中创建子矩阵的主要内容,如果未能解决你的问题,请参考以下文章
如何在 MATLAB MEX 文件中创建双精度的 N-D 矩阵?