[英]Index exceeds matrix dimensions
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
數據, 4x4798
行用作預測變量,最后一行(4th row)
是我的響應。 我將如何正確地將數據分為前3838 columns
作為我的訓練集,並保留為測試集。
謝謝..!!
要解決索引錯誤,您需要選擇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(隨機排列),因此您將再次收到“索引超出...”錯誤。
您已經將indTrain
和indTest
定義為互斥的,不需要其他操作。 如果要格外小心,可以使用setdiff
indTest = setdiff( indTest, indTrain );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.