0

運が悪かったので、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);

両者に違いはありますか?ディスプレイには同じ結果が表示されますが、コードで異なる代替を使用すると、非常に異なる結果が得られます(最初の結果で必要な結果が得られます)。

残りのコードが必要な場合は提供できますが、誰かが上記を見ているだけで何かを見つけることができれば、その必要はありません。

4

1 に答える 1

1

覚えておいてください:Matlab(ほとんど)では、すべてが行列であり、それらのいくつかが「単一」次元であっても、少なくとも2つの次元があります。あなたの場合、

[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) 

出力を見てください - これは物事を明確にするはずです。

于 2010-03-06T20:15:36.570 に答える