2010-03-06 61 views
0

我想要在MATLAB中進行子陣列沒有運氣。MATLAB - 與子陣列有問題

這是我在做什麼:

a = randint(latticeSize, 1, [0 1]); 

% a 1st attempt which works but sucks 
localPattern = [a(i-1) a(i) a(i+1)]; 

以上工作正常,但我要的東西,如來概括它:

% this is how I'd like to do it as more general 
localPattern = a(i-1 : i+1); 

是兩者之間有什麼區別?顯示器顯示相同的結果,但如果我在代碼中使用不同的替代方法,我會得到非常不同的結果(我得到我想要的第一個結果)。

如果需要其他代碼,我可以提供,但如果有人可以發現某些東西只是看着上面那麼就沒有必要。

+0

兩種方式都是相同的,應該給出相同的結果。當你得到不同的結果時,你能舉個例子嗎? – Ankit 2010-03-06 20:09:16

+0

將很快更新 – JohnIdol 2010-03-06 20:09:44

回答

1

記住:在Matlab中(幾乎),所有東西都是矩陣,並且至少有兩個維度,即使它們中的一些是「單個」維度。在你的情況,

[a(i-1) a(i) a(i+1)] 

是行,並

a(i-1 : i+1) 

你的情況一欄,因爲a是一列。爲了獲得在這兩種情況下相同的結果,你可以使用

a = randint(1, latticeSize, [0 1]); 

或轉列

localPattern = a(i-1 : i+1)'; 

這取決於在你的代碼的其餘部分繼續。

通常,[]將水平連接事物,並且索引()將保持尺寸的「指示」原樣。

您可以運行這個命令:

a = rand(10, 1) 
i=3 
localPattern = [a(i-1) a(i) a(i+1)] 
localPattern = a(i-1 : i+1) 

,並看看輸出 - 這應該澄清的事情。

+0

+1 - > a = randint(1,latticeSize,[0 1]);你基本上給出瞭解決方案,所以我打電話給答案。我仍然不清楚它爲什麼能夠正常工作,因爲即使在我更改了那行代碼之前,打印輸出也顯示了相同的結果(兩行都有)! – JohnIdol 2010-03-06 20:23:39

+0

看到我上面的最後編輯,在答案的底部 - 我無法正確地將代碼放在一個聲明中。 – AVB 2010-03-06 20:27:52

+0

好的,很明顯。我以前一直在運行測試時一直在困惑。謝謝! – JohnIdol 2010-03-06 20:43:49