指数超过矩阵维度

时间:2014-08-07 06:06:18

标签: matlab neural-network

X= [P(1,:,:);
    P(2,:,:);
    P(3,:,:)];
y= P(4:end,:);
indTrain = randperm(4798);
indTrain = indTrain(1:3838);
trainX= X(indTrain,:);
trainy = y(indTrain); 
indTest = 3839:4798;
indTest(indTrain) = []; 
testX = X(indTest,:);
testy = y(indTest);

它显示trainX= X(indTrain,:);中的错误

  

指数超出矩阵维度

任何人都可以澄清一下吗?谢谢。

顺便说一下,我有一个4x4798数据,前3行用作预测变量,最后一行(4th row)是我的回复。我将如何正确地将数据拆分为第一个3838 columns作为我的训练集并保留为测试集。

谢谢.. !!

1 个答案:

答案 0 :(得分:2)

修复错误

要修复索引错误,您需要选择X索引,而不是索引:

trainX = X(:, indTrain );  

一些建议的话

您的P矩阵似乎是4乘4798,而两个维度。因此,写P(1,:,:)确实会选择第一行,但由于末尾有额外的P,因此给出了: 维度的印象。 不要那样做。这是一个坏习惯,使你的代码更难阅读/理解/调试。

X = P(1:3,:); % select all three rows at once
y = P(4,:); % no need for 4:end here - again, gives wrong impression as if you expect more than a single label per x.

此外,我不明白你想用indTest(indTrain)=[]完成什么?您是否试图确定火车和测试装置是否相互排斥?
此行很可能会导致错误,因为测试集的大小为960且indTrain包含1:3838(随机置换),因此您将再次出现“index exceeded ...”错误。
您已将indTrainindTest定义为互斥,无需其他操作。如果您需要格外小心,可以使用setdiff

indTest = setdiff( indTest, indTrain );