2010-03-06 79 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