如何在MATLAB中创建子矩阵

问题描述 投票:-1回答:3

我有这项工作,我必须通过从给定的数据集创建一个子矩阵。我将在下面解释。

假设,我的数据集如下:

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(留一个)实现这个数据集,以便我可以进一步开展它。

如果你们有任何关于如何做的想法,请分享。 :)

matlab matrix machine-learning submatrix
3个回答
0
投票

假设A是主矩阵,a1a2将是你的第一组子矩阵,而b1b2将是第二组子矩阵。

>> 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

0
投票

正确的索引是你的朋友。对于给定的矩阵:

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

0
投票

如果你有统计数据和ML工具箱,那么你可以使用他们的内置交叉验证功能。见cvpartitioncrossvalind

© www.soinside.com 2019 - 2024. All rights reserved.