【问题标题】:How does matlab interpet colon notation with vectors (ex. '(2:3):2:10')?matlab如何用向量解释冒号符号(例如'(2:3):2:10')?
【发布时间】:2013-07-15 09:36:32
【问题描述】:

通过忽略向量,它只是等同于2:2:10,还是有任何进一步的应用?

我想创建一个由多个数字组成的数组,就像 [2,3,4,6,8,9,10] 一样,但令人惊讶的是 (2:3):2:10 只返回了 [2,4,6,8,10]

【问题讨论】:

  • 如果我不知道 MATLAB 语法并写了(2:3) : 2 : 10,我想我会创建一个混合了2:2:103:2:10 的数组,即@987654328 @。那么,您是如何来到[2,3,4,6,8,9,10] 的呢?你想混合2:2:103:3:10吗?

标签: arrays matlab notation colon


【解决方案1】:

来自Colon 的文档:

如果您指定非标量数组,MATLAB 会将 j:i:k 解释为 j(1):i(1):k(1)

【讨论】:

  • 非常感谢。可悲的是,我还不能投票。那么是否有任何解决方法或其他简单的方法来实现 [2,3,4,6,8,9,10]?
  • @user1332355 对于您的具体情况[2:3, 4:2:10],但如果您想要一个一般性的答案,我建议您发布一个新问题,更一般地描述您的要求。此外,您可能还无法投票,但您可以将此答案标记为正确。
  • 哦。谢谢。我只是在尝试使用冒号表示法,以及尝试使用 P(P(2:10000):P(2:10000):10000)=0 (而 P=1:10000)来实现 Erastothenes 筛子。似乎冒号表示法并不像我以前认为的那么棒,这就是我想知道的。谢谢。
【解决方案2】:

正如尼克回答的那样,你写的内容被 MATLAB 解释为

2:2:10

即,第一个嵌套序列的3 被忽略。

我认为你想要完成的是两个独立序列的union

>> union(2:2:10, 3:3:10)
ans =
    2     3     4     6     8     9    10

更一般地说,

N = 100;

C = arrayfun(@(x)x+x:x:N, 2:N, 'UniformOutput', false);
unique([C{:}])

【讨论】:

  • 谢谢。实际上我正在尝试完成更复杂的数组。我简化了一点来问这个问题。考虑尝试实现 2:2:n、3:3:n、...、n-1、n 的排序组合,即。 2:n 中每个数字的每次乘法。
  • @user1332355:所以包括重复输入?即2:2:103:3:106 的共同点; 6 因此应该在最终数组中出现两次吗?
  • 没有。抱歉不够精确。
  • @user1332355:我很确定所有x:x:N for x = 2..N 没有重复的组合正好等于2:N...想想看:联合至少包括所有x,因为每个新系列都以x开头。由于x2 变为N,因此没有重复的联合就是2:N
  • 你完全正确。对不起。可悲的是,我不是母语人士,我真的无法正确翻译我的想法。有时我放弃了简单和过度简化它们,而没有过多考虑我实际写的内容。我现在将尝试正确翻译它,并在发布之前三思而后行,但这可能需要一些时间。
猜你喜欢
  • 2023-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-20
  • 1970-01-01
  • 2020-09-11
  • 2011-11-18
  • 1970-01-01
相关资源
最近更新 更多