MATLAB:使用for循环将向量中的特定值分配给新的组/向量

时间:2018-02-11 21:37:24

标签: matlab for-loop vector

我正在研究神经网络训练数据,并将250名患者的载体均匀分配到10个不同的组,名为Icross。这意味着25名患者被分配到第1组,25名患者被分配到第2组,等等。Icross是250x1的载体。

我想创建一个for循环,将患者分别分为测试和训练组ItestItrain向量。这意味着分配到1-5组的患者在Itest,6-10在Itrain

对于我的输出,理想情况下,两个向量中将有250行数据作为输出,由1和0组成,表示它是否已分配到组中,具体取决于我查看的生成的向量。但是,使用for循环我创建的只是为每个向量分配一个值5。有关如何修改循环的任何建议吗?

for Icross = 1:5;
    Itest = Icross;
    Itrain = ~Itest;
end

理想输出:

Name    Value    
Itest = 250x1 logical
Itrain= 250x1 logical

我创建的for循环输出:

Name    Value
Icross  5 (1x1double)
Itest   5 (1x1double)
Itrain  0 (1x1logical)

2 个答案:

答案 0 :(得分:1)

问题是你的循环在每次迭代中为同一个变量分配一个新值。只是一个数字示例,因为我不知道您的基础数据是什么样的:

% A single vector containing all the patients...
patients = (1:250).';

% A 25-by-10 matrix representing the patients categorized into groups...
patients_grouped = reshape(patients,25,10);

% Two matrices, one for the training and one for the test:
test = reshape(patients_grouped(:,1:5),125,1);
train = reshape(patients_grouped(:,6:end),125,1);

如果你想将250名患者随机分成10组,事情会变得更加复杂。为此,以下代码应该可以解决问题:

% A single vector containing all the patients...
patients = (1:250).';

% Define the number of groups...
g = 10;

% Split the patients...
[n,m] = size(patients);
count = numel(patients) / g;
[~,idx] = sort(rand(n,1));
C = patients(idx,:);

patients_grouped = NaN(count,g);

for k = 1:g
    idx_k = ((k - 1) * count) + 1:(k * count);
    patients_grouped(:,k) = C(idx_k,:);
end

一旦您的患者被随机分组​​到10类别,获取您的逻辑数组,定义他们是属于测试组还是培训组,可以这样做:

patients_1to5 = patients_grouped(:,1:5);
patients_test = ismember(patients,patients_1to5(:));
patients_train = ~patients_test;

答案 1 :(得分:0)

如果Icross是一个值为1-10的向量,将患者分配到10组,那么

Itest = Icross <= 5;
对于1-5组中的所有患者,

均为真(1),

Itrain = ~Itest;

适用于其他组的所有患者(6-10)。