簡體   English   中英

索引超過矩陣尺寸

[英]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(隨機排列),因此您將再次收到“索引超出...”錯誤。
您已經將indTrainindTest定義為互斥的,不需要其他操作。 如果要格外小心,可以使用setdiff

indTest = setdiff( indTest, indTrain );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM