我试图在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 :(得分: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)
并查看输出 - 这应该澄清一些事情。