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 中(几乎)一切都是矩阵并且至少有两个维度,即使其中一些是“单例”维度。在你的情况下,

[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 回答