【问题标题】:logical operation within vector range expression in MATLABMATLAB中向量范围表达式内的逻辑运算
【发布时间】:2015-06-03 22:25:13
【问题描述】:

我可以有类似的东西

A=1:10;

A(1:2 && 5:6)=0;

意思是我想在一行中将向量索引表达式中的特定范围归零

这可能吗?

如果我想把其他的都归零怎么办

A(~[1:2]) = 0 

向量索引中逻辑非的方式是什么?

谢谢

【问题讨论】:

  • 如果我想像 A(~[1:2]) = 0 一样将所有其余部分归零怎么办?向量索引中逻辑非的方式是什么?
  • 我编辑了我的答案,将您提供的索引的补码也归零。
  • 谢谢,效果很好,但是没有逻辑表达式的东西吗?这样不应该更快吗?
  • ~ 运算符只能作用于逻辑/布尔数组,不能作用于像[1:2,5:6] 这样的数值数组。 ismembc 函数是将索引列表[1 2 5 6] 转换为适当的逻辑数组[1 1 0 0 1 1 0 0 0 0] 以便我们可以使用~ 对其进行操作。它应该很快。在我的计算机上执行此操作 10,000 次需要 0.13 秒。
  • 嗨,我找到了一种新的单行方式来做到这一点,现在我看看它是否更快:)

标签: matlab vector range expression logical-operators


【解决方案1】:

以下应该有效:

idx = [1:2,5:6];
A(idx) = 0

如果要将索引向量的补码归零:

idx = [1:2,5:6];
A(~ismembc(1:length(A),idx)) = 0

其中ismembcismember 的更快、轻量级版本,它假定数组已排序且非稀疏且没有NaN 元素。 (归功于this question。)

【讨论】:

    【解决方案2】:

    只需A([1:2 5:6])。即,只需创建一个要归零的索引向量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-23
      • 1970-01-01
      • 2020-10-08
      • 1970-01-01
      • 2012-02-15
      • 1970-01-01
      • 1970-01-01
      • 2015-03-25
      相关资源
      最近更新 更多