【问题标题】:MATLAB - having trouble with sub-arrayMATLAB - 子数组有问题
【发布时间】:2011-01-24 12:47:47
【问题描述】:

我正在尝试在 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);

两者之间有什么区别吗? 显示器显示相同的结果,但如果我在代码中使用不同的替代方案,我会得到非常不同的结果(我得到了我想要的第一个) .

如果需要其余代码,我可以提供它,但如果有人能看到上面的内容,那么就没有必要了。

【问题讨论】:

  • 两种方式都是一样的,应该给出相同的结果。当你得到不同的结果时,你能举个例子吗?

标签: matlab sub-array


【解决方案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) 

看看输出——这应该可以澄清事情。

【讨论】:

  • +1 与这一行 --> a = randint(1, latticeSize, [0 1]);你基本上给出了解决方案,所以我标记为答案。我仍然不太清楚为什么它会起作用,因为即使在我更改那行代码之前,打印输出也显示了相同的结果(两者的行)!
  • 在答案的底部查看我上面的最后一次编辑 - 我无法正确地将代码放在一个 omment 中。
  • 好的,很清楚。之前运行测试时,我一定很困惑。谢谢!
猜你喜欢
  • 2012-01-11
  • 2015-11-20
  • 1970-01-01
  • 1970-01-01
  • 2010-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多