2012-10-08 114 views
2

我想連接從1 - >(a-1)+(a + 1) - > n的數組數組。Matlab的貓()函數:索引超過矩陣的尺寸

我所用的貓功能

cat(2, 1:a-1, a+1:n) 

但我正在逐漸

Index exceeds matrix dimensions. 

除非我大錯特錯了,我只是想來連接兩個數字矩陣,所以我的錯誤不太確定爲什麼我得到這個錯誤。

我試圖做到這一點:

>> a = 3; 
>> n = 10; 
>> cat(2, 1:a-1, a+1:n) 
ans = 
    [1,2,4,5,6,7,8,9,10] 

這是錯誤的方式做到這一點?任何想法爲什麼會出現這個錯誤?

回答

6

你的工作空間中是否有變量cat

>> cat(2, 2:3, 4:6)     # this works fine 
ans = 
    2  3  4  5  6 
>> cat = 1:3;       # introduce the variable 'cat' 
>> cat(2, 2:3, 4:6)     # now it breaks 
??? Index exceeds matrix dimensions. 
+0

其實是的,它的一個結構。有沒有什麼辦法可以做到這一點,而無需更改變量的名稱? (我沒有寫這個,只是試圖爲某人調試,並想盡可能少地改變)。 – user1653208

+2

最好的辦法是改變變量的名稱。告訴你的朋友,長遠來看這會更好。讓你的變量與內置的Matlab函數共享名稱是一個非常非常糟糕的主意。 如果他們真的不想改變它,你可以使用'horzcat(1:a-1,a + 1:n)'而不是cat(2,1:a-1,a + 1:n )',或者只是使用Matlab的數組連接語法:'[1:a-1,a + 1:n]'。 –

+0

我只是做了一個查找/替換。現在工作正常。非常感謝 – user1653208

2

看起來您在工作區中有一個名爲cat的變量。當然,乾淨的方法是重命名變量:如果您有一個足夠新版本的Matlab(R2012x,我認爲),您可以在它分配的第一行中替換cat(選擇變量以查看灰色記號以窗口的右側,指示變量在函數中出現的位置),並使用shift+enter來替換所有發生的事件。或者你可以使用查找/替換所有功能(確保你只替換單詞,但不是子串)。

如果你不能取代現有的變量名,您可以用方括號連環沿着第一和/或第二個維度:

cat(2,a,b) 

相當於

[a,b] 
2

只是爲了保持完整性,你試圖完成的級聯也可以這樣實現:

R = 1:n; 
R = R(R ~= a) 

我個人認爲這看起來比

更清潔
R = [1:a-1 a+1:n] 

但這是個人的;我總是對1:a-1>5(它是((1:a)-1)>5(1:(a-1))>5(1:a)-(1>5)或...)感到有點困惑。我總是不得不想一會兒,而我立即明白我的解決方案。